インデックス・アドバイス情報の取得(SQL パフォーマンス・モニターの結果から)

Visual Explain には実行時間を知ることともうひとつ、インデックスのアドバイスの有無の確認という、まずSQL チューニングのとっかかりとしてほしい情報があります。

ということで、「Visual Explain 情報の取得(SQL パフォーマンス・モニターの結果から)」の結果に、インデックス・アドバイス情報をくっつけてみることにしました。

実は、インデックス・アドバイス情報をつけるのはそれほど難しいことではなく、行の QQRID について 3020 のものが「SQE インデックス・アドバイス」となっているので、同様に自己結合してやればいいわけです。(これもインデックス・アドバイスのあるSQL とそうでないものがありますので、外部結合、というかたちになりますね)

↓が実行結果ですね。

↓が SQL の全文になります。

SELECT 

    T.QQUCNT as Statement_ID, 
    T.QQC182 as Statement_Name, 
    T.QQC181 as Cursor_Name, 
    T.QQC21 as Statement_Operation,   
    T.QQ1000L as Statement_Text_Long, 
    V.QQ1000 as Host_Variable_Values, 
    (Q.QQI5 * 1000) as Optimize_Microseconds, 
    CASE WHEN T.QQC21 = 'OP' THEN Microsecond(T.QQETIM - T.QQSTIM) ELSE NULL END as Open_Microseconds, 
    CASE WHEN T.QQC21 = 'FE' THEN (R.QQI2 * 1000) ELSE NULL END as Fetch_Microseconds,   
 /* CASE WHEN T.QQC21 = 'FE' THEN Microsecond(T.QQETIM - T.QQSTIM) ELSE NULL END as Fetch_Microseconds, */ 
    CASE WHEN T.QQC21 = 'CL' THEN Microsecond(T.QQETIM - T.QQSTIM) ELSE NULL END as Close_Microseconds, 
    A.QQIDXA as Index_is_Advised, 
    A.QQTLN as System_Table_Schema, 
    A.QQTFN as System_Table_Name, 
    A.QQTMN as Member_Name,  
    A.QQTOTR as Table_Total_Rows, 
    A.QQI1 as Number_of_Advised_Columns, 
    A.QQI2 as Number_of_Advised_Primary_Columns,   
    A.QQIDXD as Index_Advised_Columns_Short_List, 
    A.QQ1000L as Index_Advised_Columns_Long_List, 
    CASE WHEN A.QQRCOD = 'I1' THEN '行選択' 
             WHEN A.QQRCOD = 'I2' THEN '順序付け/グループ化' 
             WHEN A.QQRCOD = 'I3' THEN '行選択と順序付け/グループ化' 
             WHEN A.QQRCOD = 'I4' THEN 'ネスト・ループ結合' 
             WHEN A.QQRCOD = 'I5' THEN 'ビットマップ処理を使用した行選択' 
            ELSE NULL END as Reason_Code, 
    CASE WHEN A.QVC1F = 'B' THEN 'BINARY RADIX' 
            WHEN A.QVC1F = 'E' THEN 'EVI' 
           ELSE NULL END as Type_of_Index_Advised   

FROM ((QGPL.QZG0000009 T LEFT OUTER JOIN QGPL.QZG0000009 V ON T.QQUCNT=V.QQUCNT AND T.QQRID=1000 AND V.QQRID=3010) 
                                    JOIN QGPL.QZG0000009 Q ON T.QQUCNT=Q.QQUCNT AND T.QQRID=1000 AND Q.QQRID=3014) 
                                    JOIN QGPL.QZG0000009 R ON T.QQUCNT=R.QQUCNT AND T.QQRID=1000 AND R.QQRID=3019 
                                    LEFT OUTER JOIN QGPL.QZG0000009 A ON T.QQUCNT=A.QQUCNT AND T.QQRID=1000 AND A.QQRID=3020 

WHERE T.QQC21 in ('OP' ,'FE', 'CL') AND R.QQI2 <> 0 

ORDER BY STATEMENT_ID, Host_Variable_Values, T.QQSTIM, T.QQC21 DESC; 

↑ではOS オブジェクトとしての 10桁の"物理ファイル"としての名前(DSPFD コマンドなどで使用する名前ですね)を表示させるようにしていますが、SQL で使用されるテーブル名は通常↓のロング・ネームと言われるものなので、こっちの方がいいかもしれません。

    A.QVPLIB as Base_Table_Schema, 
    A.QVPTBL as Base_Table_Name,

あと、↓のような名前も選べるみたいですが、正直言ってどういう時に使えるのか知りません。。またもしわかれば追記しておきます。

    A.QQPTLN as System_Base_Table_Schema, 
    A.QQPTFN as System_Base_Table_Name, 
    A.QQPTMN as System_Base_Member_Name, 

[Top Pageに戻る]

Ads by TOK2