パラレルDMLおよびパラレルDDLのリソース消費に影響するパラメータを次に示します。
パラレルの挿入、更新および削除操作では、シリアルDML操作よりも多くのリソースが必要です。同じく、PARALLEL
CREATE
TABLE
AS
SELECT
およびPARALLEL
CREATE
INDEX
でも、より多くのリソースが必要となることがあります。このため、場合によっては、さらにいくつかの初期化パラメータの値を増やす必要があります。これらのパラメータは問合せのためのリソースには影響しません。
関連項目:
初期化パラメータについては、『Oracle Databaseリファレンス』を参照してください。
パラレルのDMLおよびDDLでは、各問合せサーバー・プロセスがトランザクションを開始します。パラレル実行コーディネータは2フェーズのコミット・プロトコルを使用してトランザクションをコミットします。このため、処理されるトランザクション数はDOPに応じて増加します。この結果、TRANSACTIONS
初期化パラメータの値を増やす必要が生じることがあります。
TRANSACTIONS
パラメータでは、同時トランザクションの最大数を指定します。デフォルトでは並列処理は想定されていません。たとえば、DOPが20の場合は、追加の新しいサーバー・トランザクション20(サーバー・セットが2つの場合は40)とコーディネータ・トランザクション1が生成されます。この場合、トランザクションが同一インスタンスで実行されているときは、TRANSACTIONS
に21(または41)を加えた値に増やします。このパラメータを設定しない場合は、Oracle Databaseによって値が1.1 x SESSIONS
になるように設定されます。サーバー管理のUNDOを使用している場合、この説明は適用されません。
コミットされていないパラレルDMLまたはパラレルDDLトランザクションがあるときにシステムで障害が発生した場合に、FAST_START_PARALLEL_ROLLBACK
パラメータを使用して、起動時のトランザクションのリカバリを高速化できます。
このパラメータは、異常終了したトランザクションをリカバリするときに使用されるDOPを制御します。異常終了したトランザクションとは、システム障害の前にアクティブだったトランザクションです。デフォルトでは、最大でCPU_COUNT
パラメータ値の2倍になるようにDOPが選択されます。
このデフォルトDOPが不十分な場合は、パラメータをHIGH
に設定します。これにより、最大DOPがCPU_COUNT
パラメータの4倍になります。この機能はデフォルトで使用できます。
このパラメータでは、DMLロックの最大数を指定します。この値は、すべてのユーザーが参照するすべての表でのロック数の合計と等しくなるように指定する必要があります。パラレルDML操作のロック要件は、シリアルDMLの要件と大きく異なります。パラレルDMLで保持されるブロックはかなり多いため、DML_LOCKS
パラメータの値を倍量に増やす必要があります。
注意:
ターゲット表の表ロックが使用禁止の場合、パラレルDML操作は実行されません。
表8-4に、様々なパラレルDML文ごとにコーディネータとパラレル実行サーバー・プロセスによって取得されるロックの種類を示します。この情報を使用して、このようなパラメータで必要な値を決定することができます。
表8-4 パラレルDML文で取得されるロック
文のタイプ | コーディネータ・プロセスが取得するロック | 各パラレル実行サーバーが取得するロック |
---|---|---|
パーティション表に対するパラレル |
1つの表ロックSX プルーニングされたパーティションまたはサブパーティション当たり1つのパーティション・ロックX |
1つの表ロックSX 問合せサーバー・プロセスが所有するプルーニングされたパーティションまたはサブパーティション当たり1つのパーティション・ロック 問合せサーバー・プロセスが所有するプルーニングされたパーティションまたはサブパーティション当たり1つのパーティション待機ロックS |
パーティション表に対するパラレル行移行 |
1つの表ロックSX プルーニングされたパーティションまたはサブパーティション当たり1つのパーティション・ロックX 他のすべてのパーティションまたはサブパーティションの1つのパーティション・ロックSX |
1つの表ロックSX 問合せサーバー・プロセスが所有するプルーニングされたパーティションまたはサブパーティション当たり1つのパーティション・ロック 問合せサーバー・プロセスが所有するプルーニングされたパーティション当たり1つのパーティション待機ロックS 他のすべてのパーティションまたはサブパーティションの1つのパーティション・ロックSX |
パーティション表に対するパラレル |
1つの表ロックSX すべてのパーティションまたはサブパーティションのパーティション・ロックX |
1つの表ロックSX パーティションまたはサブパーティション当たり1つのパーティション・ロック パーティションまたはサブパーティション当たり1つのパーティション待機ロックS |
パーティション表に対するパラレル |
1つの表ロックSX 指定されたパーティションまたはサブパーティション当たり1つのパーティション・ロックX |
1つの表ロックSX 指定されたパーティションまたはサブパーティション当たり1つのパーティション・ロック 指定されたパーティションまたはサブパーティション当たり1つのパーティション待機ロックS |
非パーティション表に対するパラレル |
1つの表ロックX |
なし |
注意:
表、パーティションおよびパーティション待機のDMLロックはすべて、TMロックとしてV$LOCK
ビューに表示されます。
DOPを100として実行する600のパーティションを含む表について検討します。すべてのパーティションが、行移行のないパラレルUPDATE
文またはDELETE
文に関連するとします。
コーディネータでは次のロックが取得されます。
1つの表ロックSX
600のパーティション・ロックX
サーバー・プロセス全体では次のロックが取得されます。
100の表ロックSX
600のパーティション・ロックNULL
600のパーティション待機ロックS