• ベストアンサー

pl/sqlでのautotraceについて

PL/SQLの実行計画を取得したいのですが、autotraceを指定しても その結果が表示されません。結果表示のためにはsqlplusと違った 考慮が必要なのでしょうか。oracleに詳しい方、教えてください。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.3

#2 です。 因みに、そのPL/SQLから切り出す(実行計画を取りたい)対象のクエリが沢山あるなら、SQLトレースの方が遥かに楽です。 autotraceと同様に、ただ単に、実行するだけなので。 そして正確です。 PL/SQLからクエリを切り出すと言う事は、バインド変数・置換変数(リテラル)による実行計画の差異を気にかけて実行計画を取る必要があります。 (そこをカバーできるようにSQLを書き換える必要がある) SQLトレースは、PL/SQL内で実際に実行されたクエリ、そのものの実行計画なので、正確、と言うわけです。 サーバー側での作業が必須であり、そこの工数(ってほどでもないけど)とのトレードオフですね。 一回、定常的なスキームにしてしまえば、それほど手間ではありません。

namidame_dion
質問者

お礼

確かにPL/SQLからSQLを切り出すのは大変ですよね。上記の方法で やってみます。丁寧なご説明ありがとうございました。

その他の回答 (2)

  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.2

#1さんの方法を取るか、もっと正確を期すのであれば、そのセッションでSQLトレースを取って、サーバー側で tkprof コマンドを実行し、出力されたプルーフファイルで実行計画を確認するか、ですね。 アプリケーション・トレース・ツールの使用方法 http://download.oracle.com/docs/cd/E16338_01/server.112/b56312/sqltrace.htm

namidame_dion
質問者

お礼

早速のご回答助かります。 こんな技もあるのですね。大変勉強になります。

  • Struggler
  • ベストアンサー率18% (97/527)
回答No.1

実行計画はSQLの実行に対して取得するものでPL/SQLには対応してません。 PL/SQL内のSQLを取りたければ、切り出してそのSQLだけ実行して取得してください。

namidame_dion
質問者

お礼

ご回答ありがとうございます。 PL/SQLには対応していないのですね。 カーソルで検索した後、そのキーを使用してループ内でアップデートを かけているため、その部分のSQLだけを切り出して性能評価することに 意味があるかを再考してみます。