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

前
次

パラレルDMLおよびパラレルDDLのリソース消費に影響するパラメータ

パラレルDMLおよびパラレルDDLのリソース消費に影響するパラメータを次に示します。

パラレルの挿入、更新および削除操作では、シリアルDML操作よりも多くのリソースが必要です。同じく、PARALLEL CREATE TABLE AS SELECTおよびPARALLEL CREATE INDEXでも、より多くのリソースが必要となることがあります。このため、場合によっては、さらにいくつかの初期化パラメータの値を増やす必要があります。これらのパラメータは問合せのためのリソースには影響しません

関連項目:

初期化パラメータについては、『Oracle Databaseリファレンス』を参照してください。

TRANSACTIONS

パラレルのDMLおよびDDLでは、各問合せサーバー・プロセスがトランザクションを開始します。パラレル実行コーディネータは2フェーズのコミット・プロトコルを使用してトランザクションをコミットします。このため、処理されるトランザクション数はDOPに応じて増加します。この結果、TRANSACTIONS初期化パラメータの値を増やす必要が生じることがあります。

TRANSACTIONSパラメータでは、同時トランザクションの最大数を指定します。デフォルトでは並列処理は想定されていません。たとえば、DOPが20の場合は、追加の新しいサーバー・トランザクション20(サーバー・セットが2つの場合は40)とコーディネータ・トランザクション1が生成されます。この場合、トランザクションが同一インスタンスで実行されているときは、TRANSACTIONSに21(または41)を加えた値に増やします。このパラメータを設定しない場合は、Oracle Databaseによって値が1.1 x SESSIONSになるように設定されます。サーバー管理のUNDOを使用している場合、この説明は適用されません。

FAST_START_PARALLEL_ROLLBACK

コミットされていないパラレルDMLまたはパラレルDDLトランザクションがあるときにシステムで障害が発生した場合に、FAST_START_PARALLEL_ROLLBACKパラメータを使用して、起動時のトランザクションのリカバリを高速化できます。

このパラメータは、異常終了したトランザクションをリカバリするときに使用されるDOPを制御します。異常終了したトランザクションとは、システム障害の前にアクティブだったトランザクションです。デフォルトでは、最大でCPU_COUNTパラメータ値の2倍になるようにDOPが選択されます。

このデフォルトDOPが不十分な場合は、パラメータをHIGHに設定します。これにより、最大DOPがCPU_COUNTパラメータの4倍になります。この機能はデフォルトで使用できます。

DML_LOCKS

このパラメータでは、DMLロックの最大数を指定します。この値は、すべてのユーザーが参照するすべての表でのロック数の合計と等しくなるように指定する必要があります。パラレルDML操作のロック要件は、シリアルDMLの要件と大きく異なります。パラレルDMLで保持されるブロックはかなり多いため、DML_LOCKSパラメータの値を倍量に増やす必要があります。

注意:

ターゲット表の表ロックが使用禁止の場合、パラレルDML操作は実行されません。

表8-4に、様々なパラレルDML文ごとにコーディネータとパラレル実行サーバー・プロセスによって取得されるロックの種類を示します。この情報を使用して、このようなパラメータで必要な値を決定することができます。


表8-4 パラレルDML文で取得されるロック

文のタイプ コーディネータ・プロセスが取得するロック 各パラレル実行サーバーが取得するロック

パーティション表に対するパラレルUPDATEまたはDELETE(WHERE句によりパーティションまたはサブパーティションのサブセットにプルーニング)

1つの表ロックSX

プルーニングされたパーティションまたはサブパーティション当たり1つのパーティション・ロックX

1つの表ロックSX

問合せサーバー・プロセスが所有するプルーニングされたパーティションまたはサブパーティション当たり1つのパーティション・ロックNULL

問合せサーバー・プロセスが所有するプルーニングされたパーティションまたはサブパーティション当たり1つのパーティション待機ロックS

パーティション表に対するパラレル行移行UPDATE(WHERE句によりパーティションまたはサブパーティションのサブセットにプルーニング)

1つの表ロックSX

プルーニングされたパーティションまたはサブパーティション当たり1つのパーティション・ロックX

他のすべてのパーティションまたはサブパーティションの1つのパーティション・ロックSX

1つの表ロックSX

問合せサーバー・プロセスが所有するプルーニングされたパーティションまたはサブパーティション当たり1つのパーティション・ロックNULL

問合せサーバー・プロセスが所有するプルーニングされたパーティション当たり1つのパーティション待機ロックS

他のすべてのパーティションまたはサブパーティションの1つのパーティション・ロックSX

パーティション表に対するパラレルUPDATEMERGEDELETEまたはINSERT

1つの表ロックSX

すべてのパーティションまたはサブパーティションのパーティション・ロックX

1つの表ロックSX

パーティションまたはサブパーティション当たり1つのパーティション・ロックNULL

パーティションまたはサブパーティション当たり1つのパーティション待機ロックS

パーティション表に対するパラレルINSERT(目的の表はパーティション句またはサブパーティション句を含む)

1つの表ロックSX

指定されたパーティションまたはサブパーティション当たり1つのパーティション・ロックX

1つの表ロックSX

指定されたパーティションまたはサブパーティション当たり1つのパーティション・ロックNULL

指定されたパーティションまたはサブパーティション当たり1つのパーティション待機ロックS

非パーティション表に対するパラレルINSERT

1つの表ロックX

なし


注意:

表、パーティションおよびパーティション待機のDMLロックはすべて、TMロックとしてV$LOCKビューに表示されます。

DOPを100として実行する600のパーティションを含む表について検討します。すべてのパーティションが、行移行のないパラレルUPDATE文またはDELETE文に関連するとします。

コーディネータでは次のロックが取得されます。

  • 1つの表ロックSX

  • 600のパーティション・ロックX

サーバー・プロセス全体では次のロックが取得されます。

  • 100の表ロックSX

  • 600のパーティション・ロックNULL

  • 600のパーティション待機ロックS