[Oracle] ルールベースオプティマイザの廃止と動的サンプリング | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

ルールベースオプティマイザの廃止

Oracle 10g ではルールベースオプティマイザ(RBO)が廃止され、コストベースオプティマイザ(CBO)に一本化されました。

ルールベースオプティマイザは実際に格納されているデータの内容に関係なく、一定のルールに基づいて SQL の実行計画を決定します。

一方のコストベースオプティマイザは、実際に格納されているデータの内容を分析し、SQL の実行計画を決定します。

どちらが優れているかといえば、総合的に判断するとコストベースオプティマイザということになります。

それゆえにルールベースオプティマイザは廃止されたというわけです。


しかし、コストベースオプティマイザも万能というわけではありません。


コストベースオプティマイザを使用するには、オプティマイザ統計情報の収集が必要です。

オプティマイザ統計情報が欠落している場合は、コストベースオプティマイザは適用できません。

このような場合、従来のバージョンではルールベースオプティマイザが適用されていましたが、Oracle 10g では SQL のコンパイル時にコスト計算のための統計情報を動的に収集し、コストベースオプティマイザが最適なアクセスパスを判断することができるようになっています。

このコスト計算のための統計情報を動的に収集する機能は動的サンプリングと呼ばれ、Oracle 10g ではデフォルトで有効となっています。

動的サンプリング


動的サンプリングは OPTIMIZER_DYNAMIC_SAMPLING 初期化パラメータで設定します。

OPTIMIZER_DYNAMIC_SAMPLING 初期化パラメータには 0 ~ 10 までのサンプリングレベルが設定でき、デフォルト値は 2 となっています。

0 にすると動的サンプリングは無効(※)となり、レベルが高くなるにつれ、動的サンプリングの適用範囲が拡大し、サンプリングするブロック数も多くなります。

※ 動的サンプリングが無効の場合、コストベースオプティマイザはオプティマイザ統計情報のデフォルト値をコスト計算に使用します。


このように動的サンプリングはオプティマイザ統計情報を収集し忘れていても、コスト計算のための統計情報を動的に収集し、コストベースオプティマイザが機能するようフォローする便利な機能です。

とはいえ、動的サンプリングはそれ自体に実行コストがかかります。そのため、できる限り動的サンプリングに頼らないような運用を心がけるべきでしょう。


むしろ、動的サンプリングの利用価値は別のところにあります。


それについてはまたの機会に...




【関連エントリ】
[Oracle] オプティマイザ統計情報の収集は基本的にOracle任せでOK
[Oracle] オプティマイザ統計情報を手動収集する
[Oracle] 一時表のオプティマイザ統計情報の収集について
[Oracle] 揮発性の高い表のオプティマイザ統計情報の収集について