oracle

Oracle 実行計画の取得(実際に実行した結果の取得)

EXPLAIN PLANで実行計画(予定)を取得するのでははく、これは実際に動作したあと、「どのようなアクセスパスであったか」を出力します。その昔は、V$SQL_PLANを参照していましたが、こちらのほうが使い勝手よくなりました。ただしV$SQL等と同様にライブラリキャッシュに残存している間のみ有効です。
第1パラメータはSQL_ID
第2パラメータはchild No 省略するとデフォルト0を採用

DBMS_XPLAN.DISPLAY_CURSOR()を使って実行時のプランを取得する
select * from table(DBMS_XPLAN.DISPLAY_CURSOR('dw5a4prnbfuw5', 0))
;
PLAN_TABLE_OUTPUT
SQL_ID  dw5a4prnbfuw5, child number 0
-------------------------------------
select /* コメント1 */ * from  PRODUCT_MST t  order by t.CODE desc
 
Plan hash value: 234484996
 
----------------------------------------------------------------------------------------------
| Id  | Operation                   | Name           | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                |       |       |     2 (100)|          |
|   1 |  TABLE ACCESS BY INDEX ROWID| PRODUCT_MST    |     4 |   104 |     2   (0)| 00:00:01 |
|   2 |   INDEX FULL SCAN DESCENDING| PK_PRODUCT_MST |     4 |       |     1   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------
 

呼び出しパラメータに「format=>’ALL LAST PEEKED_BINDS’」 をつけると、バインド変数の値を表示する事ができます。

select * from table(DBMS_XPLAN.DISPLAY_CURSOR('dw5a4prnbfuw5', 0,format=>'ALL LAST PEEKED_BINDS'))
;
おまけ:SQL_IDとCHILD_NOを取得する方法

実際に利用する際はまず、SQL_IDとCHILD_NOを取得しないといけませんが、私は以下のようにSQLの中にコメントを入れて、V$SQLからこのコメントをキーに取得しています。具体的には以下の通り。

-- 実行計画を取得したいSQLにコメント(後に検索キーとして利用)を含めて実行
select /* コメント1 */ * from  PRODUCT_MST t  order by t.CODE desc
;

次にV$SQLを検索してSQL_IDとCHILD_NOを取得する。以下SQLは複数行結果セットが返されますが、最上位に出力されたものが対象になります。(検索キーは他と被らないように気を付けましょう)

select s.SQL_ID,s.CHILD_NUMBER,s.SQL_TEXT from v$sql s 
where s.SQL_TEXT like '%コメント1%' order by s.LAST_ACTIVE_TIME
;
SQL_ID	CHILD_NUMBER	SUBSTR(S.SQL_TEXT,1,40)
dw5a4prnbfuw5	0	select /* コメント1 */ * from  PRODUCT_MST t
aufbvg617btw4	0	select s.SQL_ID,s.SQL_TEXT from v$sqlsta
SQL_ID	CHILD_NUMBER	SUBSTR(S.SQL_TEXT,1,60)

スポンサーリンク
タイトルとURLをコピーしました