4

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 時間実行しましたが、何も起こらなかったようです。単純な選択など、その他のクエリはスムーズに機能します。

質問:

  1. 同じことを達成できる、より効率的な別のクエリに関する提案はありますか?
  2. このパフォーマンスの問題がデータベースの構成に関係している可能性はありますか?
4

2 に答える 2

3

「説明」機能を試して、db2がクエリから何を作成しているかを確認します

db2exfmt -d データベース -e スキーマ -t -v % -w -1 -s % -# 0 -n % -g OTIC

于 2013-02-13T11:32:00.540 に答える