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