2009年5月31日日曜日

Oracle:optimizer_mode オプティマイザの判断ミスを疑ってみよう(1/3) - @IT

オプティマイザの判断ミスを疑ってみよう(1/3) - @IT

2つの最適化の方向性がある。

1.レスポンス重視(最初の数行を返すまでの時間を最適化)
2.スループット重視(最後の行を返すまでの時間を最適化)

Oracle10Gの場合デフォルトは、
optimizer_mode string ALL_ROWS
これは、2.のスループット重視に最適(データフェアハウスやバッチ処理に)

OLTP系のWebアプリはレスポンス重視
→FIRST_ROWS_nを指定
n:1,10,100,1000

詳しくはここを参照

http://otndnld.oracle.co.jp/products/database/oracle10g/performance/htdocs/burleson_cbo_pt1/burleson_cbo_pt1_2.html

Oracleでは、最適な実行計画の定義を選択できる複数のオプティマイザ・モードを用意しています。

* optimizer_mode=first_rows_ このCBOモードは、他の計画に比べ全問合せの実行により長い時間がかかる、またはより多くのコンピューティング資源を使用しますが、可能な限り速く行を戻します。 索引へアクセスすると行を迅速に戻すことができるため、first_rows optimizer_modeでは通常フル・テーブル・スキャンより索引スキャンを選択します。 first_rowsモードでは、フル・テーブル・スキャンより索引スキャンが有効なため、first_rowsモードは、エンド・ユーザーに対して小さな結果セットの高速な表示が必要なOLTPシステムに適しています。

* optimizer_mode=all_rows_ このCBOモードでは、問合せ全体が完了するまで行が戻されませんが、コンピューティング資源全体が最小限に抑えられます。 all_rowsアクセス方法は、全索引スキャンよりパラレル・フル・テーブル・スキャンが有効な場合が多く、索引経由の事前ソートの取得よりソートが選択されます。 フル・テーブル・スキャンが有効なall_rowsモードは、リアルタイム表示のための中間の行が不要なデータ・ウェアハウス、意思決定システムおよびバッチ指向のデータベースに適しています。

* optimizer_mode=first_rows_nこのOracle9i Databaseオプティマイザ・モードの拡張機能は、予期された小さなリターン・セットの問合せを最適化します。 値はfirst_rows_1、first_rows_10、first_rows_100およびfirst_rows_1000です。 CBOは、問合せ結果セットのカーディナリティを判断するための重要なドライバとしてfirst_rows_nのnを使用します。 CBOに事前に問合せから特定の行を戻す指定をすることで、CBOは表の行にアクセスするために索引を使用するかどうかをより的確に判断できます。

* Optimizer_mode=ruleルールベース・オプティマイザ(RBO)は、Oracleデータベースの初期リリースからの古いオプティマイザ・モードです。ルールベース・オプティマイザは、約10年更新されておらず、RBOは1994年以降のOracleの新機能(ビットマップ索引、表パーティションおよびファンクション・ベースの索引など)をサポートしないため、本番使用はお薦めしません。

0 件のコメント: