他の操作の出力を必要とする操作は、コンシューマ操作と呼ばれます。図8-1では、GROUP
BY
SORT
操作はHASH
JOIN
操作のコンシューマです。GROUP
BY
SORT
ではHASH
JOIN
の出力が必要なためです。
コンシューマ操作は、プロデューサ操作で行が生成されるとすぐに行の消費を開始できます。例8-2では、パラレル実行サーバーがsales
表のFULL
SCAN
で行を生成する間、別のパラレル実行サーバー・セットがHASH
JOIN
操作の実行を開始して、行を使用することができます。
同時に実行される2つの操作それぞれには、独自のパラレル実行サーバー・セットが与えられます。したがって、問合せ操作とデータ・フロー・ツリーの両方でそれぞれの並列処理が行われます。個々の操作の並列処理はイントラ・オペレーション並列化と呼ばれます。データ・フロー・ツリーの操作間の並列処理はインター・オペレーション並列化と呼ばれます。Oracle Databaseの操作のプロデューサとコンシューマという形態のため、実行時間を最小限にするために同時に実行する必要があるのはツリー内の2つの操作のみです。次の文に関して、イントラ・オペレーション並列化とインター・オペレーション並列化を説明します。
SELECT * FROM employees ORDER BY last_name;
実行計画により、employees
表の全体スキャンが実装されます。この操作の後で、取得された行がlast_name
列の値に基づいてソートされます。この例では、last_name
列には索引がないとします。また、問合せのDOPが4
に設定されているとします。これは、どの操作に対しても4つのパラレル実行サーバーが使用できることを意味します。
図8-2は、この例の問合せのパラレル実行を示しています。
図8-2に示すように、この問合せのDOPは4
ですが、実際は8つのパラレル実行サーバーが関係しています。これは、プロデューサ演算子とコンシューマ演算子が同時に実行できるためです(インター・オペレーション並列化)。
また、スキャン操作に関係するすべてのパラレル実行サーバーが、SORT
操作を実行する適切なパラレル実行サーバーに行を送信します。パラレル実行サーバーでスキャンされる行のlast_name
列の値がA
からG
の場合、その行は最初のORDER
BY
パラレル実行サーバーに送信されます。スキャン操作が完了すると、ソート・プロセスはソート結果を問合せコーディネータに返し、コーディネータが完全な問合せ結果をユーザーに返します。