SQLチューニング(2) --- オプティマイザ&統計

  • RBOCBO
    • ルールベースオプティマイザ
      • あらかじめOracleサーバで持っているルール情報に基づいてアクセスパスを決定する
      • 10gからは非サポート
    • コストベースオプティマイザ
      • アクセスパスのコストを見積り、コストが低いものを選択する
      • 定期的に統計情報を取得しないと、変なアクセスパスになってパフォーマンスが低下してしまう
      • オプティマイザモードをアプリに合った設定にする
  • オプティマイザモード
    • モードはインスタンスレベル・セッションレベル・文レベルで設定可能
    • ヒントを使用すれば、強制的に実行計画を変更できる
      • CHOOSE(デフォルト。統計情報があればALL_ROWS、なければRBO
      • RULE(RBO
      • FIRST_ROWS(CBO。あまり使わない。最初の1行の応答時間を最小にする)
      • FIRST_ROWS_n(CBO。OLTP向き。最初のn行の応答時間を最小にする)
      • ALL_ROWS(CBO。DSS向き。全体スループットを最小にする)
  • CBOが使用する統計情報の収集
    • ANALYZEコマンド
    • DBMS_STATSパッケージ
      • ANALYZEと違い、CBOが使用する統計情報以外の情報(行連鎖や行移行の情報など、コスト計算に直接関係無いもの)は収集してくれない
      • 統計のコピー機能もあって便利(本番機の統計情報を試験機に持ってくるとか、統計を再収集したら実行計画がおかしくなったから前の統計に戻すとか。)
  • 統計情報の確認
    • 表:DBA_TABLES
    • 列:DBA_TAB_COL_STATISTICS
    • 索引:DBA_INDEXES