メインコンテンツまでスキップ

Plan Analysis

Plan Analysis画面では、1つのSQLが期間中に異なる実行計画(Plan)で複数回実行された履歴を見つけ、計画別の性能差と実際の実行計画、計画が変わった原因を確認できます。

左側メニューでデータベース > Oracle > SQL分析 > Plan Analysisを選択してください。

Plan Analysis 全体画面

画面は上部の照会条件、Plan Analysis List、Trend チャート、下部のSQL ListとPlan/Reasonパネルで構成されます。

照会条件を設定する​

画面上部で照会対象と条件を設定します。

  • Period: 照会する日付範囲を選択します。
  • Group / Instance: 照会するインスタンスグループと個別インスタンスを選択します。
  • Plan Count: 照会期間中に実行計画が変わった回数(以上)を指定します。値を高くするほど、計画がより頻繁に変わったSQLのみに絞り込んで確認できます。

条件を変更した後は[Search] ボタンをクリックしないと新しい条件で再照会されません。

[Option] ボタンをクリックすると、ポップアップでSQL IDを直接入力して特定のSQL1件のみを照会できます。

Option ポップアップ

Plan Analysis Listで計画が変わったSQLを確認する​

Plan Analysis Listでは、条件に該当する、すなわち実行計画が複数回変わったSQLを一覧で確認できます。

一覧で行をクリックすると、下のTrend チャートとSQL List、Planパネルがすべて選択したSQL基準で更新されます。

一覧上部のフィルター入力欄にテキストを入力すると、カラム値を基準に一覧を素早くフィルタリングできます。

Trend チャートで計画別の性能推移を比較する​

Trend チャートでは、選択したSQLのPlan Hash Value(実行計画)別に色を分けて性能指標の推移をラインで表示します。

左上のドロップダウンでElapsed Time (sec)、CPU Time (sec)など表示する指標を変更できます。

同じSQLであっても特定の区間でグラフの色(Plan Hash Value)が変わりながら値が急激に変化する場合、実行計画の変更が性能低下の原因である可能性が高いため、下のSQL Listで該当計画を確認することをお勧めします。

SQL ListとPlan/Reasonで計画の詳細を確認する​

SQL Listでは、選択したSQLのPlan Hash Value・Child Number別の実行統計を確認できます。

行をクリックすると、右側のパネルが該当計画基準で更新されます。

  • Plan タブ: 実行計画をツリー構造で表示し、下部のPredicate Informationで各ステップのフィルター・アクセス条件を確認できます。

    Plan タブ

  • Reason タブ: 該当Child Cursorが新規作成された原因(例: 統計情報変更によるRolling Invalidate)を原文のまま表示します。

    Reason タブ

ノート

同じSQLであってもバインド変数の値や統計情報の変更により複数のChild Numberが発生する場合があり、Child Numberごとに実行計画(Plan Hash Value)が異なることがあります。

Plan Diffで2つの実行計画を比較する​

Plan タブ右上の、Plan Hash Value横の比較アイコンをクリックするとPlan Diffポップアップが開き、左右に2つの実行計画を並べて比較できます。

Plan Diff ポップアップ

左右それぞれのPlan Hash Valueドロップダウンで比較する実行計画を選択すると、2つの計画のPredicate Informationが併せて表示され、異なる条件は色で強調されるため、何が変わったのかをすぐに確認できます。

ノート

左右に同じPlan Hash Valueを選択すると、比較対象がないため実行計画とPredicate Informationの両方が「No data.」と表示されます。

Plan Hash Valueが同じ場合