Visual Explain 情報の取得(プラン・キャッシュ・スナップショットの結果から)

Visual Explain 情報の取得(SQL パフォーマンス・モニターの結果から)」で、SQL パフォーマンス・モニターの結果から Visual Explain の情報を取ってくることができることを見ましたが、プラン・キャッシュのスナップショットからも同様の情報は取得できるようになっています。

↓がプラン・キャッシュ・スナップショットの一部分ですが、

表示されている SQL を選んでその右クリックメニューから「Visual Explain」を選択すると、↓のような Visual Explain が表示されるようになっています。

↑も↓も「Visual Explain 情報の取得(SQL パフォーマンス・モニターの結果から)」で見たアクセス・プランと同じものなのですが、フェッチの時間がかなり違っています。(V5R4 ではほぼ同じ数値がオープン時間のところに表示されていました。N/A でない表示が V6R1 でフェッチの場所になったことからも、V5R4 で数値がオープン時間のところに表示されていたのは間違いだった可能性が高いですね)

↓の SQL で、V5R4 / V6R1 ともども Visual Explain にほぼ表示されているとおりの時間を取得することができます。

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 
FROM ((QGPL.QZG0000128 T LEFT OUTER JOIN QGPL.QZG0000128 V ON T.QQUCNT=V.QQUCNT AND T.QQRID=1000 AND V.QQRID=3010) 
                                    JOIN QGPL.QZG0000128 Q ON T.QQUCNT=Q.QQUCNT AND T.QQRID=1000 AND Q.QQRID=3014) 
                                    JOIN QGPL.QZG0000128 R ON T.QQUCNT=R.QQUCNT AND T.QQRID=1000 AND R.QQRID=3019 
ORDER BY STATEMENT_ID, Host_Variable_Values ; 

実行例は↓のようなかんじですね。

Visual Explain 情報の取得(SQL パフォーマンス・モニターの結果から)」との大きな違いは、フェッチやクローズの時間が載ってこないことと、実行回数を取ってこれる(SQL パフォーマンス・モニターの場合は言ってみれば SQL トレースなので毎回の実行はそれぞれ一回ということになります)ということでしょうか。

フェッチの時間に関しては、V6R1 の場合はあまりに違っているので、参考として↓のような値を一緒に出しておくのもいいのかもしれません。

   (R.QQI2 * 1000) as Clock_Time_to_Return_All_Rows,
   T.QVP15D as Worst_Time_Microseconds,

SQL パフォーマンス・モニターで取った Visual Explain 情報とプラン・キャッシュ・スナップショットからの比較を、別の例でも見てみましょう。

↓が SQL パフォーマンス・モニターで取った Visual Explain 情報です。

↓が、同じ SQL の実行について、プラン・キャッシュ・スナップショットから Visual Explain 情報を取得したものです。

Statement Name や Optimization Time から同一の SQL であることがわかりますが、フェッチ時間には大きな差がありますね。

先ほどの SQL に、追加の情報をつけて実行してみましょう。

↑の 2列目のものが該当するのですが、フェッチに相当する時間が 219 microseconds になっています。(それで↑の Visual Explain で 0.0 (ms) になっているんですね)

"Worst" でも 816 microseconds なので、SQL パフォーマンス・モニターに記録された 422000 microseconds とは差がありすぎるんですが …

こちらも全文を載せておきます。

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 
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 
ORDER BY STATEMENT_ID, Host_Variable_Values ;

[Top Pageに戻る]

Ads by TOK2