インデックス・アドバイス情報の取得(プラン・キャッシュ・スナップショットの結果から)

インデックス・アドバイス情報の取得(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, 
    CAST(ROUND((T.QQI6/T.QVP15F), 0) AS INTEGER) as Run_Time_Microseconds, 
    T.QVP15F as Times_Run, 
    A.QQIDXA as Index_is_Advised, 
    A.QQTLN as System_Table_Schema, 
    A.QQTFN as System_Table_Name, 
    A.QQTOTR as Table_Total_Rows, 
    A.QQI1 as Number_of_Advised_Columns, 
    A.QQI2 as Number_of_Advised_Primary_Columns,   
    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.QZG0000182 T LEFT OUTER JOIN QGPL.QZG0000182 V ON T.QQUCNT=V.QQUCNT AND T.QQRID=1000 AND V.QQRID=3010) 
                                    JOIN QGPL.QZG0000182 Q ON T.QQUCNT=Q.QQUCNT AND T.QQRID=1000 AND Q.QQRID=3014) 
                                    JOIN QGPL.QZG0000182 R ON T.QQUCNT=R.QQUCNT AND T.QQRID=1000 AND R.QQRID=3019 
                                    LEFT OUTER JOIN QGPL.QZG0000182 A ON T.QQUCNT=A.QQUCNT AND T.QQRID=1000 AND A.QQRID=3020 
ORDER BY STATEMENT_ID, Host_Variable_Values ; 

インデックスをつけることを推奨されているテーブル名について、メンバーまで含めてシステム名で出したい場合は↓のようになります。

    A.QQTLN as System_Table_Schema, 
    A.QQTFN as System_Table_Name, 
    A.QQTMN as System_Table_Member_Name, 

通常 SQL で使われるロング・ネームで表示させたい場合は↓を使用します。

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

実行例は↓のようなかんじになります。

Visual Explain 情報の取得(プラン・キャッシュ・スナップショットの結果から)」の後半部分で紹介した SQL (Worst_Time などを取り込んだもの)を組み合わせると↓のようになりますね。

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, 
   (R.QQI2 * 1000) as Clock_Time_to_Return_All_Rows,
   T.QVP15D as Worst_Time_Microseconds,
   CAST(ROUND((T.QQI6/T.QVP15F), 0) AS INTEGER) as Run_Time_Microseconds, 
   T.QVP15F as Times_Run, 
    A.QQIDXA as Index_is_Advised, 
    A.QQTLN as System_Table_Schema, 
    A.QQTFN as System_Table_Name, 
    A.QQTOTR as Table_Total_Rows, 
    A.QQI1 as Number_of_Advised_Columns, 
    A.QQI2 as Number_of_Advised_Primary_Columns,   
    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.QZG0000186 T LEFT OUTER JOIN QGPL.QZG0000186 V ON T.QQUCNT=V.QQUCNT AND T.QQRID=1000 AND V.QQRID=3010) 
                                    JOIN QGPL.QZG0000186 Q ON T.QQUCNT=Q.QQUCNT AND T.QQRID=1000 AND Q.QQRID=3014) 
                                    JOIN QGPL.QZG0000186 R ON T.QQUCNT=R.QQUCNT AND T.QQRID=1000 AND R.QQRID=3019 
                                    LEFT OUTER JOIN QGPL.QZG0000182 A ON T.QQUCNT=A.QQUCNT AND T.QQRID=1000 AND A.QQRID=3020 
ORDER BY STATEMENT_ID, Host_Variable_Values ; 

[Top Pageに戻る]

Ads by TOK2