小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


Oracle 10gからオプティマイザの仕様が変わりました。

はじめに

Oracle 10gからオプティマイザの仕様が変わりました。
ルールベースオプティマイザ(CBO)が廃止され、コストベースオプティマイザ(RBO)に一本化されました。
ルールベースオプティマイザ廃止に伴う影響についてまとめてみました。

完全合格 ORACLE MASTER Bronze DBA12c テキスト+問題集で合格力が身につく
田中亮 津田竜賜 伊藤尚子
KADOKAWA/アスキー・メディアワークス
売り上げランキング: 65,734

ざっくり言うと
  • Oracle 10gからデータの件数や偏りを加味したSQLチューニングが行われる。
  • コストの算出に使う統計情報は自動的に収集されるから気にしなくてもOK。
  • オプティマイザが良い実行計画を選んでくれないときは、開発者がオプティマイザを教育しよう。
コストベースオプティマイザの廃止
  • Oracle 10gからルールベースオプティマイザ(RBO)は廃止(動作保証外)になった。
  • /*+ RULE */みたいなルールベースヒントは無視される。
統計情報の取得
  • 初期化パラメタSTATISTICS_LEVELがデフォルト値"TYPICAL"になっていれば、コスト算出に使う統計情報は自動的に収集される。
  • 統計情報が取得されていない場合は、SQL実行前に勝手に統計情報を取得してくれるが、逆に言えば、統計情報を収集する分クエリの実行時間が長くなる可能性がある。
  • 統計情報は基本的に全自動で取得されるが、バッチ処理などで急激にデータ内容が変動する場合には、直後に統計情報を取得しなおさないと、後続ジョブのパフォーマンスが悪化する恐れがある。
上級者向け
  • コストベースオプティマイザが良い実行計画を選んでくれない場合、ヒント句をつけたりプランスタビリティを使用し、オプティマイザに対して実行計画を教えてあげよう。
プランスタビリティとは

実行計画の安定化のこと。