2

Oracle 11gR2 データベースで TOAD からクエリを実行しています。クエリ実行中(並列度にもよりますが60秒から400秒かかります)、TOADのSession Browserからステータスを確認したところ、Sessionを初めて見たときに、実行中に並列度が変化する可能性があることに気付きました。ブラウザでは、クエリの並列度が 16 のようですが、画面を更新すると、8、2、または 1 になる場合があります。または、32 に増加する場合があります。

Oracle で実行中にクエリの並列度を変更するメカニズムはありますか? または、セッションの並列度を表示しているときに TOAD が誤動作していますか?

4

2 に答える 2

2

ここに表示されているのは、クエリ内のさまざまな操作がそれぞれ独自の度合いを持っているため、さまざまな度合いの並列処理です。異なるテーブルのスキャンには異なる程度が含まれ、結合の結果セットに基づくマージは、結合自体に対して異なる程度を持つことができます。

よく忘れられる問題の 1 つは、PQ スレーブの数がクエリの並列度の 2 倍になることがよくあることです。これは、テーブルの読み取りがテーブルの DoP で実行されますが、行を消費するために別のスレーブのセットが必要になる場合があるためです (集計など)。

于 2013-01-30T14:09:40.060 に答える
2

特定の並列度(DOP)をOracle Databaseからリクエストできます。たとえば、テーブルまたはインデックス レベルで固定 DOP を設定できます。

例:

ALTER TABLES sales PARALLEL 8;
ALTER TABLE customers PARALLEL 4;

この場合、sales テーブルのみにアクセスするクエリは要求された DOP 8 を使用し、customers テーブルにアクセスするクエリは 4 の DOP を要求します。サーバー (プロデューサーまたはコンシューマー); 異なるDOPが指定されるたびに、Oracle Databaseはより高いDOPを使用します。

PARALLEL 句が指定されているが、並列度がリストされていない場合、オブジェクトはデフォルトの DOP を取得します。デフォルトの並列処理では、次のように、式を使用してシステム構成に基づいて DOP を決定します。

単一のインスタンスの場合、

DOP = PARALLEL_THREADS_PER_CPU x CPU_COUNT

Oracle RAC 構成の場合、

DOP = PARALLEL_THREADS_PER_CPU x CPU_COUNT x INSTANCE_COUNT

デフォルトでINSTANCE_COUNTは、クラスター内のすべてのノードです。ただし、Oracle RACサービスを使用してパラレル操作を実行できるノード数を制限した場合、参加ノード数はそのサービスに属するノード数になります。たとえば、各ノードに 8 個の CPU コアがあり、Oracle RAC サービスがない 4 ノードの Oracle RAC クラスタでは、default DOP would be 2 x 8 x 4 = 64.

デフォルトの DOP アルゴリズムは、最大限のリソースを使用するように設計されており、より多くのリソースを使用できれば操作がより速く終了すると想定しています。デフォルトの並列処理は、単一ユーザーのワークロードを対象としています。マルチユーザー環境では、デフォルトの並列処理は推奨されません。

オプティマイザーは、ステートメントのリソース要件に基づいてステートメントの DOP を自動的に決定します。オプティマイザは、実行計画のすべてのスキャン操作 (全表スキャン、索引高速全スキャンなど) のコストを使用して、ステートメントに必要な DOP を決定します。

ただし、オプティマイザは実際の DOP を制限して、並列サーバー プロセスがシステムを圧倒しないようにします。この制限は、パラメーターによって設定されますPARALLEL_DEGREE_LIMIT.

簡潔にするために、重要な部分をここにリストしました。

これらすべてと、公式のOracleドキュメントでの詳細 -

http://docs.oracle.com/cd/E11882_01/server.112/e25523/parallel002.htm#BEICCFIE

これは非常に興味深い設定です。非常に役立つので、すべてを確認することをお勧めします。

于 2013-01-30T12:19:34.907 に答える