オプティマイザモード

バーレソン・コンサルティングによるオラクルのヒント

これら二つのオプティマイザの中で、Oracleはいくつかのオプティマイザ-モードを提供しています。 オプティマイザ-モードは、データベース全体に対して設定することも、特定のOracleセッションに対して設定することもできます。 オプティマイザモードには、rule、first_rows、all_rows、およびchooseが含まれます。 これらの目標のそれぞれを詳しく見てみましょう。

ルールモード

ルールヒントは、CBOと統計を無視し、基本データディクショナリ情報のみに基づいて実行計画を生成します。 ルールヒントを使用するか、alter session set optimizer_goal=ruleを発行して、RBOを使用して特定のSQL文をチューニングすることをお勧めします。 ただし、rboは、クエリを処理するために理想未満のインデックスを選択する可能性があることを常に覚えておいてください。
Optimizer_Mode=choose

オプティマイザの選択モードを使用すると、Oracleは最適なオプティマイザの目標を選択できます。 これはOracle内のデフォルトのオプティマイザ-モードであり、通常は統計の存在を使用して、どのオプティマイザを呼び出すかを決定します。 統計が存在しない場合、Oracleはルール目標を使用します。 統計が存在する場合、索引の存在とparallelismおよびdb_file_multiblock_read_countの設定に応じて、first_rowsまたはall_rowsが選択されます。

警告:choose optimizerモードで統計が不完全であると、大幅な速度低下が発生する可能性があります。 統計を含む問合せで単一の表が検出された場合、コストベースのオプティマイザが使用され、実行時に他の表の統計が計算されます。 これにより、SQLの実行が大幅に遅くなる可能性があります。 この問題は、デフォルト・モードがchooseであり、初心者のリモートDbaが選択的にanalyzeコマンドを発行することがあり、SQL実行時間に影響を与えていることを認識していないため、Oracle Remote Dbaの初心者には非常に一般的です。
first_rowsモード

これは、クエリ全体の実行時間が長くなったり、より多くのリソースを消費したりしても、できるだけ早く行を返すコストベースのオプティマイザ First_rowsオプティマイザモードでは、通常、並列のフルテーブルスキャンよりもフルインデックススキャンを選択します。 First_rowsモードでは、フルテーブルスキャンよりもインデックススキャンが優先されるため、first_rowsモードは、エンドユーザーが可能な限り迅速に結果を表示したい
all_rowsモード

これは、最初の行を受信するのに時間がかかっても、クエリ全体の時間が最小化されるようにするコストベースのオプティマイザモードです。 これには、通常、フルインデックススキャンよりも並列のフルテーブルスキャンを選択する必要があります。 All_rowsモードではフルテーブルスキャンが優先されるため、all_rowsモードは、中間行を表示する必要がないバッチ指向のクエリに最適です。
どちらが”良い”ですか? 高速実行と最小限のリソース使用量。

高速実行と最小限のリソース消費に関するオラクルの哲学を理解するには、簡単な例を見る必要があります。 All_rowsとfirst_rowsの違いを単純化した例で説明するために、次のクエリを検討します。

select
last_name
from
customer
order by
last_name;

このクエリは、次の2つの方法で処理できます:

  • フルテーブルスキャン-ここでは、フルテーブルスキャンを並行して実行し、TEMP表領域内の行をソートします。 説明のために、この実行計画では、全体的な実行時間が最も速く、リソースの使用が最小限に抑えられると仮定します(図2)。

図2:フルテーブルスキャンとソート(all_rows)の実行)

  • フルインデックススキャン-ここでは、last_name_indexを使用してlast_name順序で行を取得します。 この手法では、より多くの物理的な読み取りが行われますが、ソートされた行がほぼすぐに返され始めます(図3)。

図3: インデックス取得(first_rows)

を再度実行し、フルテーブルスキャンを受け入れ、sortがフルインデックススキャンよりもI/O集約的でないと仮定すると、オプティマイザの目標の違いを明確に見ることができます。 フルインデックススキャンは、余分なI/Oを犠牲にしてほぼすぐに行を返し始めますが、フルテーブルスキャンでは必要なリソースは少なくなりますが、

これは、Donald K.Burlesonの”Oracle High-Performance SQL Tuning”からの抜粋で、Oracle Pressから発行されています。

Write a Comment

メールアドレスが公開されることはありません。