プライマリ・コンテンツに移動
Oracle® Database VLDBおよびパーティショニング・ガイド
12c リリース1 (12.1)
B71291-10
目次へ移動
目次
索引へ移動
索引

前
次

パラレルDMLのヒント3: INSERT、MERGE、UPDATEおよびDELETEのパラレル化

データ・ディクショナリで表またはパーティションにPARALLEL属性があるとき、この属性設定が、INSERT文、UPDATE文、DELETE文および問合せでの並列処理を決定するために使用されます。文での表に対する明示的なPARALLELヒントは、データ・ディクショナリのPARALLEL属性の効果よりも優先されます。

NO_PARALLELヒントを使用すると、データ・ディクショナリの表のPARALLEL属性を上書きできます。一般的にヒントは属性よりも優先されます。

DML操作の並列処理が考慮されるのは、ALTER SESSION ENABLE PARALLEL DML文を使用してセッションがPARALLEL DMLモードになっている場合、または、ENABLE_PARALLEL_DMLヒントを使用して特定のSQL文がPARALLEL DMLモードになっている場合です。このモードは、問合せまたはDML文の問合せ部分の並列処理には影響しません。

INSERT SELECTのパラレル化

INSERT ... SELECT文では、INSERTキーワードの後にPARALLELヒントを指定できます。このヒントはSELECTキーワードの後にも指定できます。INSERTキーワードの後のPARALLELヒントはINSERT操作のみに適用され、SELECTキーワードの後のPARALLELヒントはSELECT操作のみに適用されます。したがって、INSERT操作とSELECT操作の並列処理は互いに独立しています。一方の操作をパラレルで実行できなくても、もう一方の操作をパラレルで実行できるかどうかには影響しません。

ユーザーがパラレルDMLをセッションで明示的に有効化した場合、および関連する表にデータ・ディクショナリ・エントリでPARALLEL属性が設定されている場合、挿入操作をパラレル化できる機能により既存の動作が変更されます。この場合、選択操作がパラレル化された既存のINSERT SELECT文で、挿入操作もパラレル化できます。

複数の表を問い合せる場合は、複数のSELECT PARALLELヒントと複数のPARALLEL属性を指定できます。

例8-8に、ACMEの買収後に雇用された新しい従業員の追加を示します。

例8-8 INSERT SELECTのパラレル化

INSERT /*+ PARALLEL(employees) */ INTO employees
SELECT /*+ PARALLEL(ACME_EMP) */ *  FROM ACME_EMP;

この例ではAPPENDキーワードは必要ありません。PARALLELヒントによって追加が暗黙的に指定されるためです。

UPDATEとDELETEのパラレル化

PARALLELヒント(UPDATEまたはDELETEキーワードの直後に指定)は、基礎となるスキャン操作に適用されるだけではなく、UPDATEまたはDELETE操作にも適用されます。または、変更対象の表の定義に指定されるPARALLEL句で、UPDATEまたはDELETEのパラレル化を指定できます。

セッションまたはトランザクションについてパラレルDMLを明示的に有効化した場合、問合せ操作がパラレル化されたUPDATE文またはDELETE文は、UPDATE操作またはDELETE操作もパラレル化できます。文の副問合せまたは更新可能ビューには、独自のPARALLELヒントまたは句を指定できますが、これらのパラレル・ディレクティブは更新または削除をパラレル化する決定には影響しません。これらの操作をパラレルで実行できなくても、UPDATEまたはDELETE部分をパラレルで実行できるかどうかには影響しません。

例8-9に、ダラスのすべての店員を10%昇給する更新操作を示します。

例8-9UPDATEとDELETEのパラレル化

UPDATE /*+ PARALLEL(employees) */ employees
SET salary=salary * 1.1 WHERE job_id='CLERK' AND department_id IN
  (SELECT department_id FROM DEPARTMENTS WHERE location_id = 'DALLAS');

PARALLELヒントは、UPDATE操作とスキャンに適用されます。

例8-10には、カテゴリ39のすべての商品の削除を示します。最近、事業が別会社として分離されたためです。

例8-10UPDATEとDELETEのパラレル化

DELETE /*+ PARALLEL(PRODUCTS) */ FROM PRODUCTS 
WHERE category_id = 39;

ここでも、並列性処理、表employeesのスキャンとUPDATE操作に適用されます。