How To
Summary
Db2 は SQL 実行時に、TBSCAN や IXSCAN、NLJOIN などの各オペレーターが実際に処理した行数をセクション実行時統計として記録できます。これを利用して SQL コンパイラーが実行計画を作成するときに予測した行数と、実際に処理した行数を比較し、実行計画が適切かどうかを評価できます。
Objective
以下のように、セクション実行時統計を収集した場合のアクセス・プランには見積もり行数と実際の行数が記録されます。
このようなオプティマイザーによる過小見積もりが発生している場合、適切なアクセス・プランが選択されていない場合があるため、統計情報の取得方法などを再検討することが推奨されます。
Rows
Rows Actual
RETURN
( 1)
Cost
I/O
|
1.41917
2093
NLJOIN
( 2)
30.3135
NA
この例では、オプティマイザーは統計情報をもとに 1.4 行程度が NLJOIN の結果として戻されると見積もりましたが、実際には 2093 行が戻されていることがわかります。このようなオプティマイザーによる過小見積もりが発生している場合、適切なアクセス・プランが選択されていない場合があるため、統計情報の取得方法などを再検討することが推奨されます。
Steps
以下のすべての手順は、データベース管理者として SQL を実行するデータベースに接続済みと仮定しています。
- (事前準備) EXPLAIN 表が作成されていない場合は EXPLAIN 表を作成します。
[Db2] Explain 表の作成方法と削除方法 - アクティビティー・イベント・モニターを作成します。
db2 CREATE EVENT MONITOR ACTEVMON FOR ACTIVITIES WRITE TO TABLE MANUALSTART
- セクション実行時統計を採取するようにワークロードを構成します。用途に応じて適切なものを選択してください。
- 現在のデータベース接続でこれから実行する SQL が対象
db2 "CALL WLM_SET_CONN_ENV(NULL, '<collectactdata>WITH DETAILS, SECTION</collectactdata> <collectactpartition>ALL</collectactpartition><collectsectionactuals>BASE</collectsectionactuals>')"
- 特定のユーザーやアプリケーションから実行される SQL が対象
db2 "CREATE WORKLOAD WL1 SESSION_USER ('<auth_id>') APPLNAME ('<appl_name>') COLLECT ACTIVITY DATA ON COORDINATOR WITH DETAILS, SECTION INCLUDE ACTUALS BASE"
- データベースのデフォルト・ワークロードで実行されるすべての SQL が対象
db2 ALTER WORKLOAD SYSDEFAULTUSERWORKLOAD COLLECT ACTIVITY DATA ON COORDINATOR WITH DETAILS, SECTION INCLUDE ACTUALS BASE
- 現在のデータベース接続でこれから実行する SQL が対象
- イベント・モニターを有効化し、SQL のアクティビティー・データをキャプチャーします。
db2 SET EVENT MONITOR ACTEVMON STATE 1 [SQL の実行] db2 SET EVENT MONITOR ACTEVMON STATE 0
- イベント・モニター表を照会し、対象のアクティビティー情報を確認します。
db2 "SELECT APPL_ID, UOW_ID, ACTIVITY_ID, VARCHAR(STMT_TEXT,200) FROM ACTIVITYSTMT_ACTEVMON"
- 上で確認したアクティビティー情報から、EXPLAIN_FROM_ACTIVITY プロシージャーを使って指定したスキーマの EXPLAIN 表にセクション実行時統計を含む EXPLAIN 情報を挿入します。
db2 "CALL EXPLAIN_FROM_ACTIVITY( '<APPL_ID>', <UOW_ID>, <ACTIVITY_ID>, 'ACTEVMON', '<EXPLAIN 表のスキーマ>', ?, ?, ?, ?, ? )"
- 手順 6 で挿入した EXPLAIN 情報を db2exfmt でフォーマットします。
db2exfmt -d <データベース名> -1 -o exfmt.out
運用上の考慮点
- 収集したアクティビティー・データの削除方法
ACTEVMON アクティビティー・イベント・モニターのデータは以下のように消去できます。db2 SET EVENT MONITOR ACTEVMON STATE 0 db2 TRUNCATE TABLE ACTIVITY_ACTEVMON IMMEDIATE db2 TRUNCATE TABLE ACTIVITYSTMT_ACTEVMON IMMEDIATE db2 TRUNCATE TABLE ACTIVITYMETRICS_ACTEVMON IMMEDIATE db2 TRUNCATE TABLE ACTIVITYVALS_ACTEVMON IMMEDIATE
- ワークロードの削除方法
作成したワークロード WL1 を削除するには以下のステートメントを実行します。db2 ALTER WORKLOAD WL1 DISABLE db2 DROP WORKLOAD WL1
- ワークロードでアクティビティー・データの収集を停止する方法
デフォルト・ワークロードのアクティビティー収集設定は以下のように解除できます。db2 ALTER WORKLOAD SYSDEFAULTUSERWORKLOAD COLLECT ACTIVITY DATA NONE
CREATE WORKLOAD ステートメント
ALTER WORKLOAD ステートメント
EXPLAIN_FROM_ACTIVITY プロシージャー - アクティビティー・イベント・モニター情報を使用したステートメントの Explain
[Db2] パスポート・アドバンテージによく寄せられる質問
[Db2] db2caem を使用してセクション実行時統計を収集する方法
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート
ALTER WORKLOAD ステートメント
EXPLAIN_FROM_ACTIVITY プロシージャー - アクティビティー・イベント・モニター情報を使用したステートメントの Explain
[Db2] パスポート・アドバンテージによく寄せられる質問
[Db2] db2caem を使用してセクション実行時統計を収集する方法
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート
Document Location
Worldwide
[{"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-\u003EOptimization db2explain db2advis"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"10.1.0;10.5.0;11.1.0;11.5.0"}]
Was this topic helpful?
Document Information
Modified date:
24 June 2024
UID
ibm17157214