照会パフォーマンスの低下を調査するための、実行時統計が含まれるセクション Explain の取得

SQL 照会パフォーマンスの低下を解決するには、まずセクション actuals 情報が含まれるセクション Explain を取得します。 その後、セクション actuals の値を、オプティマイザーによって生成される見積もりアクセス・プランの値と比較することにより、アクセス・プランの妥当性を評価することができます。 このタスクにより、照会パフォーマンスの低下を調査するためのセクション actuals の取得プロセスに進むことができます。

始める前に

調査の診断フェーズが完了済みであり、確かに SQL 照会パフォーマンスの低下が生じていること、またどのステートメントがパフォーマンスの低下に関係していると思われるかを確認しておく必要があります。

このタスクについて

このタスクにより、照会パフォーマンスの低下を調査するためのセクション actuals の取得プロセスに進むことができます。 セクション actuals に含まれている情報は、オプティマイザーによって生成される見積もり値と比較するときに、照会パフォーマンスの低下を解決する上で役立つものとなります。


の制約事項

セクション actuals のキャプチャーとアクセスにある制限事項を参照してください。

プロシージャー

myApp.exe アプリケーションで実行する照会の照会パフォーマンスの低下を調査する場合は、以下の手順を実行します。

  1. セクション actuals を使用可能にします。
    DB2 UPDATE DATABASE CONFIGURATION USING SECTION_ACTUALS BASE
  2. SYSINSTALLOBJECTS プロシージャーを使って MYSCHEMA スキーマに EXPLAIN 表を作成します。
    CALL SYSINSTALLOBJECTS( 'EXPLAIN', 'C', NULL, 'MYSCHEMA' )
    注: EXPLAIN 表を既に作成している場合は、このステップをスキップできます。
  3. 以下の 2 つのコマンドを発行して、 myApp.exe アプリケーションによってサブミットされたアクティビティーを収集するためのワークロード MYCOLLECTWL を作成し、それらのアクティビティーのセクション・データの収集を有効にします。
    CREATE WORKLOAD MYCOLLECTWL APPLNAME( 'MYAPP.EXE') 
    COLLECT ACTIVITY DATA WITH DETAILS,SECTION
    

    これに続いて、以下を発行します。

    GRANT USAGE ON WORKLOAD MYCOLLECTWL TO PUBLIC
    注: 別個のワークロードを使用することを選択すると、アクティビティー・イベント・モニターによってキャプチャーされる情報の量が制限されます。
  4. 以下のステートメントを発行して、 ACTEVMONというアクティビティー・イベント・モニターを作成します。
    CREATE EVENT MONITOR ACTEVMON FOR ACTIVITIES WRITE TO TABLE
  5. 以下のステートメントを実行して、アクティビティー・イベント・モニター ACTEVMON を活動化します。
    SET EVENT MONITOR ACTEVMON STATE 1
  6. myApp.exe アプリケーションを実行します。
    アプリケーションによって発行されるステートメントはすべて、アクティビティー・イベント・モニターによってキャプチャーされます。
  7. 以下のステートメントを発行して、アクティビティー・イベント・モニターの表を照会し、対象のステートメントの ID 情報を検索します。
    SELECT APPL_ID,
           UOW_ID,
           ACTIVITY_ID,
           STMT_TEXT
    FROM ACTIVITYSTMT_ACTEVMON
    以下は、SELECT ステートメントを発行した結果として生成された出力例です。
    APPL_ID                    UOW_ID    ACTIVITY_ID     STMT_TEXT
    -------------------------  --------  --------------  ---------------
    *N2.DB2INST1.0B5A12222841         1               1  SELECT * FROM ...
  8. 以下の 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
  9. 以下のように、 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
    
    
    ...
  10. Explain 出力のセクション actuals 情報を調べます。
    セクション actuals の値を、オプティマイザーによって生成されるアクセス・プランの見積もり値と比較します。 セクション actuals とアクセス・プランの見積もり値の間に相違がある場合は、その相違の原因を突き止め、適切なアクションを取ります。 例えば (説明のための例ですが)、照会される表の 1 つに関して、表統計の日付が古いものだったことを突き止めたとします。 これにより、オプティマイザーは、照会パフォーマンスの低下の原因となっている可能性のある正しくないアクセス・プランを選択します。 この場合に取るべき一連のアクションは、表に対して RUNSTATS コマンドを実行して、表統計を更新することです。
  11. アプリケーションを再試行して、照会の低下が持続しているかどうか確認します。