LoginSignup
2
2

More than 5 years have passed since last update.

Oracle explain plan による実行計画の確認方法

Last updated at Posted at 2018-02-14
実行計画の解析
SET LINESIZE 200
explain plan for
SQL ;

解析されました。

実行計画の表示
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY()) ;

実行計画が表示される。

-- 以下、Oracle11.1.0以降はPLAN_TABLEは提供されているのでCREATEは不要

PLAN_TABLEは、すべてのユーザーに対してEXPLAIN PLAN文の出力を保持するグローバル一時表として自動的に作成されます。

ご指摘いただい ora_gonsuke777さん、ありがとうございます。

-- Oracle10.2.0 以下のバージョンでは最初にPLAN_TABLEをCREATEしておかなければならない。
SQL:準備
-- create PLAN_TABLE(CREATE USERしたらPLAN_TABLEもCREATEしておこう)
@?/rdbms/admin/utlxplan.sql

sqlplus で ? は ORACLE_HOME(Oracleをインストールしたディレクトリ)

PLAN_TABLE はOracleのバージョンによりテーブルの内容が異なる。
Oracleのバージョンアップで古いバージョンのPLAN_TABLEをCREATE しまっていたら、
DROP TABLE PLAN_TABLE PURGE ;
し、現バージョンのPLAN_TABLEをCREATEし直す。
異なるバージョンのPLAN_TABLEを使っても、実行計画が正しく表示される保障はない。

昔、Oracleのパフォーマンス・チューニングで呼ばれた外資系の会社で。

PLAN_TABLEがないので実行計画を確認できない。
使うように指示されたスキーマには SELECT ANY TABLE権限などが設定されていたが
CREATE TABLE権限がない。ボスにPLAN_TABLEの必要性を説明したが、どうしてもPLAN_TABLEをCREATEさせてもらえない。最初からオラクル・サポートのアカウントはもらえたので、困り果ててオラクル・サポートにOracleやSQLの知識のない人にもPLAN_TABLEの必要性を説明するわかり易い文章をいただけませんか?って泣きついた。
statspackについても同じ手段を使った。

3ヶ月の契約が終わる頃、仕事が遅いから延長はなし。そりゃ、ほとんど毎日何とか権限が必要なので ... ってやっていたから実際にチューニングできる時間はかなり少なかったからね。

仕事が終わる数日前にわたしより前にOracleのパフォーマンス・チューニングで呼ばれた人が2人はいたことが判明。ボスは誰も契約の延長はしなかった。わたしの次のチューニング担当が決まっている、とのこと。

オラクル・サポートには今でも感謝している。

2
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2