IBM Support

[Db2] db2caem を使用してセクション実行時統計を収集する方法

Question & Answer


Question

コマンド行プロセッサーから db2caem を使用してセクション実行時統計を取得する方法を教えて下さい。

Answer

V9.7 FP1 以降では、セクション実行時統計を収集することで、各演算子ごとの実際のカーディナリティーを確認できます。詳細は以下の Technote を参照してください。
パラメーター・マーカーを使用していない SQL ステートメントであれば、db2caem を使用することにより、上記 Technote に記載されている方法より簡単にセクション実行時統計を収集できます。
db2caem は SQL ステートメントを実行して情報をキャプチャーします。手順は以下の通りです。
  1. 調査対象となる SQL ステートメントをテキストファイルに記載し、ステートメントの最後にセミコロン (;) を付けて保存します。
    • db2caem 実行ユーザーがスキーマを指定しないとその SQL を実行できない場合、SQL ステートメントに含まれる表名などはスキーマ名で修飾する必要があります。Db2 11.5.6 以降は -cs <スキーマ名> オプションを付与して SQL 実行時のスキーマを指定できます。
  2. 1. で作成した SQL ファイルを指定し、以下のように db2caem を実行します。
    db2caem -d [db_name] -sf [sql_file] -o [output_directory]
    -o で指定したディレクトリに "DB2CAEM_[timestamp]" という形式のディレクトリが作成され、その下に情報が出力されます。-o を指定しなかった場合には、現行ディレクトリ配下にディレクトリが作成されます。
前述の通り、db2caem は SQL ステートメントを実行して情報をキャプチャーしますので、実行に非常に時間がかかる SQL ステートメントや、リソースを大量に消費する SQL ステートメントの場合には、以下の手順で db2caem を終了させてください。この場合でも、その時点までのセクション実行時統計の取得が可能です。(この方法が使用できるのは、V10.1 FP4 および V10.5 FP3 以降です。)
db2caem を実行しているのとは別のセッションで、以下の手順を実行します。
  1. list applications コマンドやアプリケーション・スナップショットを使用し、db2caem を実行している接続のアプリケーション・ハンドルを特定します。
    実行例
    $ db2 list applications
    Auth Id  Application    Appl.      Application Id                 DB       # of
             Name           Handle                                    Name     Agents
    -------- -------------- ---------- -----------------------------  -------- -----
    DB2INST1 db2caem        3838       *LOCAL.DB2INST1.211004062910   SAMPLE   1
  2. データベースに接続し、以下の SQL ステートメントを実行します。WLM_GET_WORKLOAD_OCCURRENCE_ACTIVITIES の最初の引数に指定する値は、1. で確認したアプリケーション・ハンドルに置き換えてください。実行結果から、UOWID と ACTID を記録しておきます。
    SELECT 
     SUBSTR(CHAR(COORD_MEMBER),1,5) AS COORD,
     SUBSTR(CHAR(MEMBER),1,4) AS MEMB,
     SUBSTR(CHAR(UOW_ID),1,5) AS UOWID,
     SUBSTR(CHAR(ACTIVITY_ID),1,5) AS ACTID,
     SUBSTR(CHAR(PARENT_UOW_ID),1,8) AS PARUOWID,
     SUBSTR(CHAR(PARENT_ACTIVITY_ID),1,8) AS PARACTID,
     SUBSTR(ACTIVITY_TYPE,1,8) AS ACTTYPE,
     SUBSTR(CHAR(NESTING_LEVEL),1,7) AS NESTING
    FROM TABLE(WLM_GET_WORKLOAD_OCCURRENCE_ACTIVITIES(3838,-2)) AS WLOACTS 
    ORDER BY MEMB,UOWID,ACTID ;
    出力例
    COORD MEMB UOWID ACTID PARUOWID PARACTID ACTTYPE NESTING
    ----- ---- ----- ----- -------- -------- -------- -------
    0    0   32    1     -        -        READ_DML 0
  3. db2caem 実行後、ある程度時間が経過したら、上記のセッションから以下のように WLM_CANCEL_ACTIVITY を実行します。アプリケーション・ハンドル、UOWID、ACTID は上記で確認したものを指定してください。これにより、SQL ステートメントの実行に割り込みが発生し db2caem の処理が停止します。db2caem の処理が停止される前に、その時点までのセクション実行時統計を含む出力が書き出されます。
    call wlm_cancel_activity([appl handle], [uowid], [actid])
    実行例
    db2 "CALL WLM_CANCEL_ACTIVITY(3838,32,1)"
SQL ステートメント全体の実行結果を反映したセクション実行時統計が収集できるのが理想的なため、可能であれば、db2caem の処理を停止するまでになるべく長い時間情報を収集するのが望ましいですが、多くの場合、db2caem の処理を途中で停止した場合でも、カーディナリティの過少見積もりがどこで発生しているか、アクセス・プランのどの部分で大量のデータが処理されているかといったような有益な情報が確認できます。
db2caem - アクティビティー・イベント・モニター・データ・ツールのキャプチャー・コマンド

お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PkyAAE","label":"Compiler-\u003EOptimizer"}],"ARM Case Number":"","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF010","label":"HP-UX"},{"code":"PF016","label":"Linux"},{"code":"PF027","label":"Solaris"},{"code":"PF033","label":"Windows"},{"code":"PF055","label":"zLinux"}],"Version":"10.1.0;10.5.0;11.1.0;11.5.0;9.7.0;9.8.0"}]

Document Information

Modified date:
24 August 2023

UID

ibm16495361