A、B、C の 3 つのテーブルを持つ DB2 データベースがあります。
データベースは次のように作成されました。
create database DB alias DB AUTOMATIC STORAGE YES ON /home/db2inst1 using codedeset UTF-8 地域 en PAGESIZE 32768
- テーブル A は幅 28 列、幅 1.8 ミルです。行と PID は主キーです。ほとんどの列は int 型ですが、一部は varchar(200-400) です。インデックス: PID
- テーブル B は幅 7 列、幅 14 ミルです。行と主キー PID_L。C_SOURCE 列と ROW_COUNT 列もあります。索引: PID,C_SOURCE
- テーブル C は 14 ミルで 20 列幅です。行と主キー PID_S。また、ROLE 列もあります。インデックス: PID,PID_S
すべてのテーブルに列 PID があります
テーブル B と C の情報を集計するテーブルが必要です。適切な項目を選択するためのクエリは次のとおりです。
SELECT
T.*,
(
SELECT
COALESCE(SUM(ROW_COUNT),0)
FROM
C as ITS,
B as ITL
WHERE
ITS.ROLE = 1
AND ITS.PID = ITL.PID
AND ITS.PID_S = ITL.C_SOURCE
AND ITS.PID = T.PID
) AS RR
FROM
A as T;
このクエリを実行すると、DB2 サーバーはすぐに約 3Gb のメモリを使用します。ただし、top を使用すると、CPU 使用率が 5% を超えることはめったになく、約 13% に跳ね上がるものもあります。DB2 サーバーは RedHat6.2 VM で、4 つのコアとコアあたり 2Ghz を備えています。
このクエリを 24 時間実行しましたが、何も起こらなかったようです。単純な選択など、その他のクエリはスムーズに機能します。
質問:
- 同じことを達成できる、より効率的な別のクエリに関する提案はありますか?
- このパフォーマンスの問題がデータベースの構成に関係している可能性はありますか?