こんにちは、けーどっとけーです😀
現在、仕事でデータベースはOracleを主に使っているのですが、SQLのクエリ実行が重い箇所があり実行計画を行うことにしました。
「実行計画」とは、SQL(クエリ)がデータベースで実行される手順を表示する機能です。
この機能を使うことで、どうすればより短い時間でSQLを実行するかのチューニングを行うヒントを得ることができます。
今回は、Oracleの実行計画について簡単にまとめてみました。
なおこちらのサイト「津島博士のパフォーマンス講座 SQLチューニングの基礎」を参考にさせていただきました。
ありがとうございます。
Oracleの実行計画を取得する
実行計画を解析するには、以下のSQLをSQL*Plus上に入力します。
EXPLAIN PLANFOR Select文
EXPLAIN PLANFORの後に、実行計画を解析したいSQL文を記載して実行します。
以下のSQLで解析した実行計画を取得します。
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY()) ;
こちらの方法だと、SQL文が実行されずに簡単に実行計画を取得できます。
ただ状況によっては正確な実行計画が取得できるわけではないので注意が必要です。
取得した実行計画を確認する
実行計画は一覧で表示されます。
行は、Id・Operation・Name・Rows・Costなどが並びます。
以下はあくまで一例です。
実行計画
————————————————————————–
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
————————————————————————–
| 0 | SELECT STATEMENT | | 7 | 32 | 1 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| TAB1 | 7 | 32 | 1 (0)| 00:00:01 |
————————————————————————–
Opertionは結合などの操作でNameは対象のテーブル名を指しています。
この見方がなかなか慣れないのですが、リーフステップ(インデントの1番深いステップ)から実行し、結合(同一インデント)では上位に表示されたものが最初に実行されたものになるとのことです。
実行順の他にRowsやCostに注意を向けるといいのこと。
上記の結果から以下のことがわかります。
- TAB1表をフルスキャンして32行取得した
- 合計コスト(CPU使用率)は2となる
今回の一言・・・
まだまだ勉強中のため初歩の初歩ですがまとめておきました。
ここまで読んでくれてありがとう。
では、また次回。
コメント