« PDFとDBXInspector | トップページ | Oracleの接続方法 »

2007年1月 1日 (月)

Oracle実行計画

で、ちょっとOracleのお話を。OracleのSQL文を作成する人は、実行するSQL文のパフォーマンスが悪かったりすると、SQL*PlusのAUTOTRACE機能を使って、SQL文の実行計画を確認するものだが、SQL*PlusのAUTOTRACE機能は自分にとっては、表示してほしい情報を表示してくれない。その情報とは、例えば、次のSQL文を考えてみよう。

Sql

二つの表A、Bを共にA列を結合キーに結合して、表BのB列が50000より大の行を返すSQL文である。まぁ、普通はOracleのオプティマイザが適切に処理をしてくれるのだが、SQL*PlusのAUTOTRACE機能の結果からじゃ、B.B > 50000という条件がいつ実行されるのか分からない。つまり、表Aと表Bを結合した後、B.B > 50000の行のみフィルタして返すのか、もしくは、先に表BをB.B > 50000でフィルタした後、表Aと結合するか。この場合、もちろん、表Bを先にフィルタして絞った方が早そうである。つまり、後者の場合だ。で、このSQL文の実行計画をDBXInspectorでとった結果が次の図である。

Plantable

この図のフィルタ述語の列を見れば、一目瞭然、先に表BがB.B > 50000でフィルタされた後、結合されているのがわかる。また、アクセス述語列を見れば、結合条件も分かる。

先ほども書いたが、Oracleのオプティマイザが適切に処理するので、アクセス述語フィルタ述語の情報は見る必要もないかもしれないが、SQL*PlusのAUTOTRACE機能の結果にはこの情報が含まれない。

で、DBXInspectorはどうやって表示してるのかと言うと、なんてことはない、この情報を含む列(access_predicates,filter_predicates)が用意されているので、それを表示してるだけだったり・・・・

ちなみに、SQL*PlusでAUTOTRACE機能を使用するためには、前もって、SYSユーザーでログインし、plustrce.sqlを実行し、PLUSTRACEロールの作成と使用するユーザーへのこのロールの権限付与を行わなければいけない。また、実行計画を格納するPLAN_TABLE表の作成(utlxplan.sql)も。

というか、最後に初めて図を挿入してみたが、適切に表示されることを祈ろう。

DBXInspectorのスクリーンショット

Dbxisc

« PDFとDBXInspector | トップページ | Oracleの接続方法 »

DBXInspector」カテゴリの記事

Oracle」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1497665/39651914

この記事へのトラックバック一覧です: Oracle実行計画:

« PDFとDBXInspector | トップページ | Oracleの接続方法 »

自作ソフトウェア

無料ブログはココログ

メモ