UNION
やUNION
ALL
などの集合演算子は、単一のSQL文に結合される複数の問合せ(分岐)で構成されます。従来、集合演算子は順に処理されます。個々の分岐をシリアルまたはパラレルで処理できますが、一度に1つの分岐のみで順に処理されます。この方法は多くのユースケースを満たしますが、UNION
またはUNION
ALL
文の複数の分岐の処理を同時に実行する状況があります。ほとんどの一般的な状況は、複数またはすべての分岐がリモートのSQL文である場合です。この状況では、すべての参加するリモート・システムの同時処理は、参加するシステムのワークロードを増やさずに処理時間全体の処理速度を上げるよう求められます。
UNION
またはUNION
ALL
文の同時実行のデフォルト動作は、OPTIMIZER_FEATURES_ENABLE
初期化パラメータの設定によって制御されます。12.1
に設定すると、同時実行がデフォルトで有効になります。少なくとも1つの分岐の文がローカルでパラレルの処理が考慮される文は、UNION
またはUNION
ALL
文全体も同時に処理されます。システムは個々のローカル分岐の文のDOPを計算し、UNION
またはUNION
ALL
文全体の実行のDOPの最大値を選択します。次に、システムは、パラレルで処理される分岐のパラレル化およびシリアルおよびリモート文の同時ワーカーに選択されたDOPを使用して、できるだけ多くの分岐を同時に処理します。
OPTIMIZER_FEATURES_ENABLE
初期化パラメータが12.1
より小さい値に設定されている場合、UNION
またはUNION
ALL
文の同時実行は、PQ_CONCURRENT_UNION
ヒントを使用して明示的に有効にする必要があります。
ただし、1つずつの分岐の連続処理とは異なり、同時処理は個々の分岐の結果の順序付けられた戻りを保証しません。1つずつの分岐の順序付けられた戻りが必要な場合、NO_PQ_CONCURRENT_UNION
ヒントを使用して同時処理を無効にするか、SQL文を拡張して個々の分岐の文を一意に識別してその指定された識別子でソートする必要があります。
特にPQ_CONCURRENT_UNION
ヒントを使用しないかぎり、シリアルまたはリモート分岐のみで構成されるUNION
またはUNION
ALL
文は同時に処理されません。このSQL文のDOPは、最大でシリアルおよびリモート入力の数です。
UNION
またはUNION
ALL
文の同時処理が発生するかどうかは、SQL文の実行計画で簡単に識別できます。パラレルで実行される場合、シリアルおよびリモート分岐の実行は、PX
SELECTOR
として識別可能な行ソースで管理されます。同時に処理されない文は、シリアルおよびリモート分岐のコーディネータとして問合せコーディネータ(QC
)を示します。
例8-7では、SQL文はローカルおよびリモート分岐で構成されています。SQL文は、ローカル・データベースのゴールドおよびプラチナ顧客の情報およびリモート・データベースの3つの主要都市の顧客の情報をロードします。ローカルSELECT文がパラレルで発生するため、この処理はパラレルで自動的に実行されます。各シリアル分岐は、1つのパラレル実行サーバー・プロセスのみによって実行されます。各パラレル実行サーバーは1つのシリアル分岐を実行できるため、同時に実行されます。
例8-7 UNION ALLの実行計画
SQL> EXPLAIN PLAN FOR INSERT INTO all_customer SELECT * FROM GOLD_customer UNION ALL SELECT * FROM PLATINUM_customer UNION ALL SELECT * FROM SF_customer@san_francisco UNION ALL SELECT * FROM LA_customer@los_angeles UNION ALL SELECT * FROM LV_customer@las_vegas; ------------------------------------------------------------------------------- | Id | Operation | Name | TQ/Ins |IN-OUT | PQ Distrib| ------------------------------------------------------------------------------- | 0 | INSERT STATEMENT | | | | | | 1 | LOAD TABLE CONVENTIONAL | ALL_CUSTOMER | | | | | 2 | PX COORDINATOR | | | | | | 3 | PX SEND QC (RANDOM) | :TQ10003 | | P->S | QC (RAND) | | 4 | UNION-ALL | | | PCWP | | | 5 | PX BLOCK ITERATOR | | | PCWC | | | 6 | TABLE ACCESS FULL | GOLD_CUSTOMER| | PCWP | | | 7 | PX BLOCK ITERATOR | | | PCWC | | | 8 | TABLE ACCESS FULL | PLATINUM_CUST| | PCWP | | | 9 | PX SELECTOR | | | PCWP | | |10 | REMOTE | SF_CUSTOMER | | PCWP | | |11 | PX SELECTOR | | | PCWP | | |12 | REMOTE | LA_CUSTOMER | | PCWP | | |13 | PX SELECTOR | | | PCWP | | |14 | REMOTE | LV_CUSTOMER | | PCWP | | -------------------------------------------------------------------------------