実行計画ってなぜ最適にならないのか? について書いてみたいと思います。
●「実行計画のトラブル」とは?
「実行計画のトラブル」を「最適ではない(=より良い実行計画が存在する)」だと定義します。このトラブルはいろいろな理由により起こります。
実行計画とは、データの処理の仕方です。処理の仕方は何通りもあるため、最近のOracleでは、コストベースという考え方で、処理時間の指標(コスト)を計算して、「この実行計画が最短だ!」と推測します。このとき使用する情報を「統計情報」と呼びます。
なお、9iまではI/O回数ベースで判断していましたが、10g以降ではSQL処理時間の目安になりました。
推測の仕方ですが、基本的に、全ての組み合わせを調査します(※)。組み合わせには、表の結合の仕方や、どの列の条件で絞るか、インデックスでアクセスするかフルスキャンするかなどが含まれます。
※:各社のRDBMSごとに工夫が見られますが、ここは割愛します。
1つのテーブルしか含まないSQLでは、数〜数十パターン程度の処理方法でしょうが、5つともなると数千という組み合わせになりかねません。いわゆる組み合わせ爆発です。
●コストとは
コスト(処理負荷の予測)は、実行計画でCOSTの列を見るとわかります。
COSTの数値が大きければ、それは大変だろうということです。たとえば、statspackのsprepsqlではこのように見えます(右の列)。COSTの数値が大きくなっているところが重い処理だとOracleが考えていることになります。
--------------------------------------------------------------------------------
| Operation | PHV/Object Name | Rows | Bytes| Cost |
--------------------------------------------------------------------------------
|SELECT STATEMENT |----- 1093152308 ----| | | 5 |
|HASH JOIN | | 1 | 36 | 5 |
| TABLE ACCESS FULL |DEPT | 1 | 22 | 2 |
| TABLE ACCESS FULL |EMP | 5 | 70 | 2 |
Author:odakeiji
小田圭二 日本オラクルの人事教育本部内の社内教育部隊で、データベースやOS、ネットワークを教える先生を5年ほど経験した後、2000年にテクノロジーコンサルティング本部に異動。テクノロジーのコンサルタントとして、主に大規模ミッションクリティカルシステムを担当。社内では”根っからの火消し”と呼ばれ、新聞に載ったり、業務改善命令が出るような、難易度の高いシステムトラブルの火消しをいくつも担当。
ポリシーは、「OracleもOS上で動くアプリケーションにすぎない。だから、OS、ストレージ、ネットワークを学ぶべき。アーキテクチャから考えろ」。
スキル面の興味は、アーキテクチャ、DBA、インフラ技術、教育、コンサル手法など。
本ブログのポリシーは「週に2回、DBAやインフラ担当者の役に立つ記事を書く」です(守れるだけ、守りたい・・・・)
なお、本ブログにおいて示されている見解は、私自身の見解であって、オラクルの見解を必ずしも反映したものではありません。ご了承ください。
