照会パフォーマンスの低下を調査するための、実行時統計が含まれるセクション Explain の取得
SQL 照会パフォーマンスの低下を解決するには、まずセクション actuals 情報が含まれるセクション Explain を取得します。 その後、セクション actuals の値を、オプティマイザーによって生成される見積もりアクセス・プランの値と比較することにより、アクセス・プランの妥当性を評価することができます。 このタスクにより、照会パフォーマンスの低下を調査するためのセクション actuals の取得プロセスに進むことができます。
始める前に
調査の診断フェーズが完了済みであり、確かに SQL 照会パフォーマンスの低下が生じていること、またどのステートメントがパフォーマンスの低下に関係していると思われるかを確認しておく必要があります。
このタスクについて
このタスクにより、照会パフォーマンスの低下を調査するためのセクション actuals の取得プロセスに進むことができます。 セクション actuals に含まれている情報は、オプティマイザーによって生成される見積もり値と比較するときに、照会パフォーマンスの低下を解決する上で役立つものとなります。
の制約事項
セクション actuals のキャプチャーとアクセス
にある制限事項を参照してください。
プロシージャー
myApp.exe アプリケーションで実行する照会の照会パフォーマンスの低下を調査する場合は、以下の手順を実行します。
- セクション actuals を使用可能にします。
DB2 UPDATE DATABASE CONFIGURATION USING SECTION_ACTUALS BASE
- SYSINSTALLOBJECTS プロシージャーを使って MYSCHEMA スキーマに EXPLAIN 表を作成します。
CALL SYSINSTALLOBJECTS( 'EXPLAIN', 'C', NULL, 'MYSCHEMA' )
注: EXPLAIN 表を既に作成している場合は、このステップをスキップできます。 - 以下の 2 つのコマンドを発行して、 myApp.exe アプリケーションによってサブミットされたアクティビティーを収集するためのワークロード MYCOLLECTWL を作成し、それらのアクティビティーのセクション・データの収集を有効にします。
CREATE WORKLOAD MYCOLLECTWL APPLNAME( 'MYAPP.EXE') COLLECT ACTIVITY DATA WITH DETAILS,SECTION
これに続いて、以下を発行します。
GRANT USAGE ON WORKLOAD MYCOLLECTWL TO PUBLIC
注: 別個のワークロードを使用することを選択すると、アクティビティー・イベント・モニターによってキャプチャーされる情報の量が制限されます。 - 以下のステートメントを発行して、
ACTEVMON
というアクティビティー・イベント・モニターを作成します。CREATE EVENT MONITOR ACTEVMON FOR ACTIVITIES WRITE TO TABLE
- 以下のステートメントを実行して、アクティビティー・イベント・モニター
ACTEVMON
を活動化します。SET EVENT MONITOR ACTEVMON STATE 1
- myApp.exe アプリケーションを実行します。アプリケーションによって発行されるステートメントはすべて、アクティビティー・イベント・モニターによってキャプチャーされます。
- 以下のステートメントを発行して、アクティビティー・イベント・モニターの表を照会し、対象のステートメントの ID 情報を検索します。
以下は、SELECT ステートメントを発行した結果として生成された出力例です。SELECT APPL_ID, UOW_ID, ACTIVITY_ID, STMT_TEXT FROM ACTIVITYSTMT_ACTEVMON
APPL_ID UOW_ID ACTIVITY_ID STMT_TEXT ------------------------- -------- -------------- --------------- *N2.DB2INST1.0B5A12222841 1 1 SELECT * FROM ...
- 以下の CALL ステートメントで示されているように、アクティビティー ID 情報を EXPLAIN_FROM_ACTIVITY プロシージャーへの入力として使用し、実行時統計を持つセクション Explain を取得します。
CALL EXPLAIN_FROM_ACTIVITY( '*N2.DB2INST1.0B5A12222841', 1, 1, 'ACTEVMON', 'MYSCHEMA', ?, ?, ?, ?, ? )
以下は、EXPLAIN_FROM_ACTIVITY 呼び出しの出力例です。Value of output parameters -------------------------- Parameter Name : EXPLAIN_SCHEMA Parameter Value : MYSCHEMA Parameter Name : EXPLAIN_REQUESTER Parameter Value : SWALKTY Parameter Name : EXPLAIN_TIME Parameter Value : 2009-08-24-12.33.57.525703 Parameter Name : SOURCE_NAME Parameter Value : SQLC2H20 Parameter Name : SOURCE_SCHEMA Parameter Value : NULLID Parameter Name : SOURCE_VERSION Parameter Value : Return Status = 0
- 以下のように、 db2exfmt コマンドを使用し、EXPLAIN_FROM_ACTIVITY プロシージャーからの出力として返された Explain インスタンス・キーを入力として指定して、Explain データをフォーマットします。
db2exfmt -d test -w 2009-08-24-12.33.57.525703 -n SQLC2H20 -s NULLID -# 0 -t
Explain インスタンスの出力は次のようになります。******************** EXPLAIN INSTANCE ******************** DB2_VERSION: 09.07.1 SOURCE_NAME: SQLC2H20 SOURCE_SCHEMA: NULLID SOURCE_VERSION: EXPLAIN_TIME: 2009-08-24-12.33.57.525703 EXPLAIN_REQUESTER: SWALKTY Database Context: ---------------- Parallelism: None CPU Speed: 4.000000e-05 Comm Speed: 0 Buffer Pool size: 198224 Sort Heap size: 1278 Database Heap size: 2512 Lock List size: 6200 Maximum Lock List: 60 Average Applications: 1 Locks Available: 119040 Package Context: --------------- SQL Type: Dynamic Optimization Level: 5 Blocking: Block All Cursors Isolation Level: Cursor Stability ---------------- STATEMENT 1 SECTION 201 ---------------- QUERYNO: 0 QUERYTAG: CLP Statement Type: Select Updatable: No Deletable: No Query Degree: 1 Original Statement: ------------------ select * from syscat.tables Optimized Statement: ------------------- SELECT Q10.$C67 AS "TABSCHEMA", Q10.$C66 AS "TABNAME", Q10.$C65 AS "OWNER", Q10.$C64 AS "OWNERTYPE", Q10.$C63 AS "TYPE", Q10.$C62 AS "STATUS", Q10.$C61 AS "BASE_TABSCHEMA", Q10.$C60 AS "BASE_TABNAME", Q10.$C59 AS "ROWTYPESCHEMA", Q10.$C58 AS "ROWTYPENAME", Q10.$C57 AS "CREATE_TIME", Q10.$C56 AS "ALTER_TIME", Q10.$C55 AS "INVALIDATE_TIME", Q10.$C54 AS "STATS_TIME", Q10.$C53 AS "COLCOUNT", Q10.$C52 AS "TABLEID", Q10.$C51 AS "TBSPACEID", Q10.$C50 AS "CARD", Q10.$C49 AS "NPAGES", Q10.$C48 AS "FPAGES", Q10.$C47 AS "OVERFLOW", Q10.$C46 AS "TBSPACE", Q10.$C45 AS "INDEX_TBSPACE", Q10.$C44 AS "LONG_TBSPACE", Q10.$C43 AS "PARENTS", Q10.$C42 AS "CHILDREN", Q10.$C41 AS "SELFREFS", Q10.$C40 AS "KEYCOLUMNS", Q10.$C39 AS "KEYINDEXID", Q10.$C38 AS "KEYUNIQUE", Q10.$C37 AS "CHECKCOUNT", Q10.$C36 AS "DATACAPTURE", Q10.$C35 AS "CONST_CHECKED", Q10.$C34 AS "PMAP_ID", Q10.$C33 AS "PARTITION_MODE", '0' AS "LOG_ATTRIBUTE", Q10.$C32 AS "PCTFREE", Q10.$C31 AS "APPEND_MODE", Q10.$C30 AS "REFRESH", Q10.$C29 AS "REFRESH_TIME", ... Explain level: Explain from section Access Plan: ----------- Total Cost: 154.035 Query Degree: 1 Rows Rows Actual RETURN ( 1) Cost I/O | 54 396 >^HSJOIN ( 2) 153.056 NA /----------+-----------\ 54 20 396 0 >^HSJOIN TBSCAN ( 3) ( 12) 140.872 11.0302 NA NA (continued below) | 20 NA TABLE: SYSIBM SYSAUDITPOLICIES (continued from above) /---------+----------\ 54 6 396 0 >^HSJOIN IXSCAN ( 4) ( 11) 138.033 2.01136 NA NA /---------+---------\ | 54 6 -1 396 0 NA >^HSJOIN IXSCAN INDEX: SYSIBM ( 5) ( 10) INDCOLLATIONS04 135.193 2.01136 NA NA /-------+--------\ | 54 6 -1 396 0 NA >^HSJOIN IXSCAN INDEX: SYSIBM ( 6) ( 9) INDCOLLATIONS04 132.354 2.01136 NA NA /-----+-----\ | 54 6 -1 396 0 NA TBSCAN IXSCAN INDEX: SYSIBM ( 7) ( 8) INDCOLLATIONS04 129.57 2.01136 NA NA | | 54 -1 NA NA TABLE: SYSIBM INDEX: SYSIBM SYSTABLES INDCOLLATIONS04 ...
- Explain 出力のセクション actuals 情報を調べます。セクション actuals の値を、オプティマイザーによって生成されるアクセス・プランの見積もり値と比較します。 セクション actuals とアクセス・プランの見積もり値の間に相違がある場合は、その相違の原因を突き止め、適切なアクションを取ります。 例えば (説明のための例ですが)、照会される表の 1 つに関して、表統計の日付が古いものだったことを突き止めたとします。 これにより、オプティマイザーは、照会パフォーマンスの低下の原因となっている可能性のある正しくないアクセス・プランを選択します。 この場合に取るべき一連のアクションは、表に対して RUNSTATS コマンドを実行して、表統計を更新することです。
- アプリケーションを再試行して、照会の低下が持続しているかどうか確認します。