図8-1に示す問合せ計画に対して、2セットのパラレル実行サーバーSS1およびSS2がある場合、各サーバー・セット(SS1およびSS2)が4つの実行プロセスを使用して実行が行われます。問合せのPARALLEL
ヒントでDOPが指定されているためです。
子セットSS1が最初に表customers
をスキャンしてSS2に行を送り、SS2はその行に対してハッシュ表を構築します。つまり、SS2のコンシューマとSS1のプロデューサは同時に働きます。一方はcustomers
をパラレルでスキャンし、もう一方は行を受け取って、パラレルでハッシュ結合を実行できるようにハッシュ表を構築します。インター・オペレーション並列処理の例を次に示します。
SS1はcustomers
表全体のスキャンを終了すると、sales
表をパラレルでスキャンします。SS1が行をSS2のサーバーに送り、SS2はプローブを実行してハッシュ結合をパラレルで完了します。SS1はsales
表のパラレルでのスキャンと行のSS2への送信を終了すると、GROUP
BY
のパラレルでの実行に切り替わります。これは、2つのサーバー・セットを同時に実行して、問合せツリーの様々な演算子に対してインター・オペレーション並列化を実現する方法です。
パラレル実行のもう1つの重要な面は、サーバー・セット間でサーバーからサーバーに送信される際の行の再分配です。例8-2の問合せ計画で、SS1のサーバー・プロセスがcustomers
表の行をスキャンした後、SS2のどのサーバー・プロセスに行を送信するでしょうか。行を受け取る演算子が、再分配を決定します。この例では、customers
のパラレル・スキャンを実行するSS1から、パラレル・ハッシュ結合を実行するSS2に送られる行の再分配は、結合列に対するハッシュ・パーティション化によって行われます。つまり、customers
をスキャンするサーバー・プロセスが、列customers.cust_id
の値のハッシュ関数を計算して、送り先のSS2のサーバー・プロセスの数を決定します。パラレル問合せで使用される再分配方法は、問合せのEXPLAIN
PLAN
のDistrib
列に明示的に示されます。図8-1では、EXPLAIN
PLAN
の5、8および12行目に示されています。