Question & Answer
Question
Db2 9.7 でコマンド行プロセッサーからセクション実行時統計を取得する方法を教えて下さい。
注:Db2 10.1 以降は以下のページを参照してください。
Cause
V9.7 FP1 以降は、セクション実行時統計を収集して各演算子ごとの実際のカーディナリティーを確認できます。
以下の出力は、セクション実行時統計を収集した時のアクセス・プランの出力です。
このようなオプティマイザーによる過小見積もりが発生している場合、適切なアクセス・プランが選択されていない場合があるため、統計情報の取得方法などを再検討することが推奨されます。
以下の出力は、セクション実行時統計を収集した時のアクセス・プランの出力です。
Rows
Rows Actual
RETURN
( 1)
Cost
I/O
|
1.41917
2093
NLJOIN
( 2)
30.3135
NA
オプティマイザーは統計情報をもとに 1.4 行程度が NLJOIN の結果として戻されると見積もりましたが、実際には 2093 行が戻されていることがわかります。このようなオプティマイザーによる過小見積もりが発生している場合、適切なアクセス・プランが選択されていない場合があるため、統計情報の取得方法などを再検討することが推奨されます。
Answer
以下はコマンド行プロセッサーからセクション実行時統計を取得する手順です。適用されているフィックスパックによって手順が変わりますのでご注意ください。
- (Db2 9.7FP1 の場合のみ) セクション実行時統計を使用可能にし、デフォルト・ワークロードをセクション実行時統計を含めたアクティビティー・データを収集するように変更します。
db2 connect to [データベース名] db2 update db cfg using SECTION_ACTUALS BASE db2 ALTER WORKLOAD SYSDEFAULTUSERWORKLOAD COLLECT ACTIVITY DATA ON ALL WITH DETAILS, SECTION db2 connect reset
- (EXPLAIN 表が存在しない場合) EXPLAIN 表を作成します。V9.7 FP1 以降で作成された EXPLAIN 表が必要です。
[Db2] Explain 表の作成方法と削除方法 - アクティビティー・イベント・モニターを作成します。
db2 CREATE EVENT MONITOR ACTEVMON FOR ACTIVITIES WRITE TO TABLE MANUALSTART
- (Db2 9.7FP2 以降の場合) WLM_SET_CONN_ENV プロシージャーで現行接続のワークロードの設定を変更します。この設定変更は、現行の接続を切断することで破棄されます。
db2 "CALL WLM_SET_CONN_ENV(NULL, '<collectactdata>WITH DETAILS, SECTION</collectactdata> <collectactpartition>ALL</collectactpartition><collectsectionactuals>BASE</collectsectionactuals>')"
- アクティビティー・データをキャプチャーしながら問題のステートメントを実行します。
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,100) FROM ACTIVITYSTMT_ACTEVMON"
WHERE APPL_ID=MON_GET_APPLICATION_ID - 手順 6 で確認したアクティビティー情報から、EXPLAIN_FROM_ACTIVITY プロシージャーを使って指定したスキーマの EXPLAIN 表にセクション実行時統計を含む EXPLAIN 情報を挿入します。手順 2 で EXPLAIN 表を作成した場合、EXPLAIN 表のスキーマには作成時の CURRENT SCHEMA の値 (デフォルトでは接続ユーザー名) を指定してください。
db2 "CALL EXPLAIN_FROM_ACTIVITY( '[APPL_ID]', [UOW_ID], [ACTIVITY_ID], 'ACTEVMON', '[EXPLAIN 表のスキーマ]', ?, ?, ?, ?, ? )"
- 手順 7 で挿入した EXPLAIN 情報を db2exfmt でフォーマットします。
db2exfmt -d [データベース名] -1 -o exfmt.out
- ステートメント実行時のパフォーマンス情報もあわせて取得する場合、手順 6 で確認したアクティビティー情報に関するメトリックを取得します。メトリックにはステートメントにおける処理ごとの所要時間や待ち時間が含まれるため、ボトルネックとなっている処理の確認などのために活用できます。
(V9.7 FP3 までの場合)db2 "SELECT METRICS.METRIC_NAME, METRICS.VALUE FROM ACTIVITY_ACTEVMON ACT, TABLE( MON_FORMAT_XML_METRICS_BY_ROW( ACT.DETAILS_XML ) ) AS METRICS WHERE ACT.APPL_ID = '[APPL_ID]' AND ACT.UOW_ID = [UOW_ID] AND ACT.ACTIVITY_ID = [ACTIVITY_ID]" > activity_actevmon.txt
db2 "SELECT * FROM ACTIVITYMETRICS_ACTEVMON WHERE APPL_ID = '[APPL_ID]' AND UOW_ID = [UOW_ID] AND ACTIVITY_ID = [ACTIVITY_ID]" > activitymetrics_actevmon.txt
- 作成したイベント・モニターが今後不要であれば、SYSCAT.EVENTTABLES 表からイベント・モニターに関連するターゲット表を確認し、ターゲット表とイベント・モニターを DROP します。
db2 "SELECT VARCHAR(TABSCHEMA,10) TABSCHEMA,VARCHAR(TABNAME,50) TABNAME FROM SYSCAT.EVENTTABLES WHERE EVMONNAME = 'ACTEVMON'" db2 DROP TABLE [TABSCHEMA].[TABNAME] db2 DROP EVENT MONITOR ACTEVMON
- (FP1 の場合) セクション実行時統計の収集が今後不要であれば、セクション実行時統計を無効にし、デフォルト・ワークロードをアクティビティー・データを収集しないように変更します。
db2 connect to [データベース名] db2 update db cfg using SECTION_ACTUALS NONE db2 ALTER WORKLOAD SYSDEFAULTUSERWORKLOAD COLLECT ACTIVITY DATA NONE db2 connect reset
運用上の考慮点
- Db2 V9.7 の場合、フィックスパックの適用後にデータベースに対して db2updv97 が実行されている必要があります。ただし、データベースがフィックスパック適用後に作成されたものであれば、db2updv97 の実行は不要です。
関連情報
FP1: 演算子カーディナリティーの実際の値を使用した Explain の拡張
照会パフォーマンスの低下を調査するための、実行時統計を持つセクション Explain の取得
ALTER WORKLOAD ステートメント
CREATE EVENT MONITOR (アクティビティー) ステートメント
WLM_SET_CONN_ENV - アクティビティー・データの収集とセクション実行時統計の測定の有効化
EXPLAIN_FROM_ACTIVITY プロシージャー - アクティビティー・イベント・モニター情報を使用したステートメントの Explain
MON_FORMAT_XML_METRICS_BY_ROW - すべてのメトリックに関するフォーマット設定された行ベースの出力の取得
[Db2] パスポート・アドバンテージによく寄せられる質問
[Db2] 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-\u003EOptimization db2explain db2advis"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"9.7.0"}]
Was this topic helpful?
Document Information
Modified date:
24 June 2024
UID
swg21600676