DISPLAY_CURSORでCBOの見積りミスを簡単に確認する

前回のエントリで DBMS_XPLAN.DISPLAY_CURSOR の format引数に’TYPICAL’と ‘ALL ALLSTATS LAST’ を主に指定すると説明しました。 本エントリでは、format引数 ‘ALL ALLSTATS LAST’の機能を説明し、 その一例として、CBOの見積りミスを簡単に確認することができることを説明したいと思います。

### format引数 ‘ALL ALLSTATS LAST’ format引数 ‘ALL ALLSTATS LAST’を指定すると、 実行計画ツリーを示す PLAN_TABLE_OUTPUT、 フィルタ条件やアクセス情報を示す Predicate Informationに加えて、 複雑なSQLを分割したクエリブロック情報や表のエイリアス情報を示すQuery Block Name / Object Alias、 アクセスした列に関する情報を示すColumn Projection Information が表示されます。

また、PLAN_TABLE_OUTPUTの列に、オペレーション単位の各種実行統計が追加されます。 format引数’TYPICAL’を指定した場合は、確認できるのはCBOによって見積もられた見積統計 (見積もり行数、見積もりバイトなど)しか確認できませんでしたが、 実行時の実行統計(実際にオペレーションを実行した結果得られた行数など) が確認できます。

また、format引数 ‘LAST’が指定されていることで、 直近のSQL実行の統計情報を表示します。 逆に’LAST’を指定しないと、得られる統計情報が共有カーソル単位の累積値となってしま い(同じSQLを複数回実行すると複数回実行分の合算値となる)、1回実行分の統計を確認したい ような通常の用途では不適切であることに注意してください。

なお、前回のエントリで説明しましたが、format引数 ‘ALLSTAT’、’LAST’は 調査対象のSQLの実行前にstatistics_levelパラメータをALLに設定するか、 SQLに /*+ gather_plan_statistics */ […]