ヘッダーをスキップ
Oracle® Database VLDBおよびパーティショニング・ガイド
11g リリース2 (11.2)
B56316-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

パラレル実行のための一般的なパラメータのチューニング

この項の内容は次のとおりです。

パラレル操作のリソース制限を設定するパラメータ

リソース制限を決定するための初期化パラメータを設定できます。リソース制限を設定するパラメータを次で説明します。


関連項目:

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

PARALLEL_FORCE_LOCAL

このパラメータは、パラレルで実行されるSQL文がOracle RAC環境のシングル・インスタンスに制限されるかどうかを示します。このパラメータをTRUEに設定することにより、問合せコーディネータが実行しているシングルOracle RACインスタンスのために処理されるパラレル・スレーブのスコープを制限できます。

PARALLEL_FORCE_LOCALパラメータの推奨値はFALSEです。

PARALLEL_MAX_SERVERS

デフォルト値は次のとおりです。

PARALLEL_THREADS_PER_CPU x CPU_COUNT x concurrent_parallel_users x 5

この計算式では、1つのインスタンスでデフォルトの並列度で実行するconcurrent_parallel_usersに割り当てられる値は、メモリー管理設定とは関係ありません。自動メモリー管理が無効な場合(手動モード)、concurrent_parallel_usersの値は1です。PGA自動メモリー管理が有効な場合、concurrent_parallel_usersの値は2です。グローバル・メモリー管理またはSGAメモリー・ターゲットがPGA自動メモリー管理とともに使用される場合、concurrent_parallel_usersの値は4になります。

この計算式は、並列度(DOP)属性が高い表に対するパラレル問合せでは十分でない可能性があります。さらに高いDOPの問合せを実行する予定があるユーザーのばあいは、次のように値を設定します。

2 x DOP x NUMBER_OF_CONCURRENT_USERS

たとえば、この値を64に設定した場合、各問合せが2つのスレーブ・セットを使用し、各セットのDOPが8とすると、4つのパラレル問合せを同時に実行できるようになります。

ユーザーのプロセスが多すぎる場合

同時ユーザーの問合せサーバー・プロセスが多すぎると、メモリー競合(ページング)、I/O競合または過剰なコンテキストのスイッチングが発生することがあります。この競合により、パラレル実行が使用されなかった場合のレベルよりもシステム・スループットが低下する可能性があります。PARALLEL_MAX_SERVERS値を増やすのは、それによって生成されるロードのための十分なメモリーおよびI/O帯域幅がシステムにある場合のみにしてください。

オペレーティング・システムのパフォーマンス・モニタリング・ツールを使用すると、メモリー、スワップ領域およびI/O帯域幅の空き状況を判別できます。CPUとディスク両方の実行キューの長さ、およびシステムのI/O処理のサービス時間を調べます。プロセスを追加する場合は、システムに十分なスワップ領域があることを確認します。問合せサーバー・プロセスの総数を制限すると、パラレル操作を実行できる同時ユーザー数が制限されることがありますが、システム・スループットは安定するようになります。

コンシューマ・グループを使用したユーザーに対するリソース数の制限

ユーザーに対してリソース・コンシューマ・グループを設定することで、所定のユーザーが使用可能な並列処理の量を制限できます。これは、1ユーザーまたは1ユーザー・グループが使用できる、セッション数、同時ログオンおよびパラレル・プロセス数を制限するために行います。

パラレル実行文を処理する各問合せサーバー・プロセスは、セッションIDを使用してログオンしています。各プロセスは、ユーザーの同時セッションの制限に対してカウントされます。たとえば、あるユーザーが使用できるパラレル実行プロセスを10個に制限するには、ユーザーの制限を11に設定します。1プロセスがパラレル実行コーディネータ用、その他の10プロセスが2セットの問合せサーバーを構成します。こうすると、パラレル実行コーディネータが1セッション、パラレル実行プロセスが10セッションを使用できます。

ユーザー・プロファイルによるリソース管理の詳細は『Oracle Database管理者ガイド』GV$ビューの問合せの詳細は『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。

PARALLEL_MIN_PERCENT

このパラメータを使用すると、ユーザーは使用中のアプリケーションに応じた許容DOPを待機することができます。PARALLEL_MIN_PERCENTパラメータの推奨値は0です。

このパラメータを0以外の値に設定すると、リクエストされたDOPがその時点でシステムによって実現されない場合、Oracle Databaseがエラーを返します。たとえば、PARALLEL_MIN_PERCENTを50(50パーセント)に設定したときに、マルチユーザー問合せ調整アルゴリズムまたはリソース制限によってDOPが50パーセントを超えて低減されると、Oracle DatabaseによってORA-12827が返されます。次に例を示します。

SELECT /*+ FULL(e) PARALLEL(e, 8) */ d.department_id, SUM(SALARY)
FROM employees e, departments d WHERE e.department_id = d.department_id
GROUP BY d.department_id ORDER BY d.department_id; 

Oracle Databaseから次のメッセージが返されます。

ORA-12827: insufficient parallel query slaves available

PARALLEL_MIN_SERVERS

このパラメータは、1つのインスタンスで、パラレル操作のために起動および予約するプロセス数を指定します。構文は次のとおりです。

PARALLEL_MIN_SERVERS=n 

n変数は、パラレル操作のために起動して保持しておくプロセス数です。

PARALLEL_MIN_SERVERSの設定により、メモリー使用量と起動コストのバランスを保つことができます。PARALLEL_MIN_SERVERSを使用して起動されるプロセスは、データベースが停止されるまで終了しません。これによって、問合せが発行されるときには、多くの場合、プロセスが使用可能になっています。

PARALLEL_MIN_TIME_THRESHOLD

このパラメータは、文が自動並列度の対象とみなされるまでの最小実行時間を指定します。デフォルトでは、この値は30秒です。自動並列度は、PARALLEL_DEGREE_POLICYAUTOまたはLIMITEDに設定されている場合のみ有効になります。構文は次のとおりです。

PARALLEL_MIN_TIME_THRESHOLD = { AUTO | integer }

デフォルトはAUTOです。

PARALLEL_SERVERS_TARGET

このパラメータは、パラレル文のキューイングが使用されるまでにパラレル文を実行できるパラレル・サーバー・プロセスの数を指定します。デフォルト値は次のとおりです。

PARALLEL_THREADS_PER_CPU * CPU_COUNT * concurrent_parallel_users * 2

この計算式では、1つのインスタンスでデフォルトの並列度で実行するconcurrent_parallel_usersに割り当てられる値は、メモリー管理設定とは関係ありません。自動メモリー管理が無効な場合(手動モード)、concurrent_parallel_usersの値は1です。PGA自動メモリー管理が有効な場合、concurrent_parallel_usersの値は2です。グローバル・メモリー管理またはSGAメモリー・ターゲットがPGA自動メモリー管理とともに使用される場合、concurrent_parallel_usersの値は4になります。

PARALLEL_DEGREE_POLICYAUTOに設定されていると、システムで現在使用されているパラレル・プロセスの数がPARALLEL_SERVERS_TARGET以上の場合、パラレル実行の必要な文はキューに入れられます。これはシステムで許可されているパラレル・サーバー・プロセスの最大数ではありません(それはPARALLEL_MAX_SERVERSによって制御されます)。ただし、PARALLEL_SERVERS_TARGETおよびパラレル文のキューイングを使用すると、パラレル実行の必要なそれぞれの文が必要なパラレル・サーバー・リソースに割り当てられ、パラレル・サーバー・プロセスの過多によるフラッドを防止できます。

SHARED_POOL_SIZE

パラレル実行では、シリアルSQL実行で必要なメモリー・リソースに加えてさらにメモリー・リソースが必要です。追加のメモリーは、問合せサーバー・プロセスと問合せコーディネータ間での通信とデータの受渡しに使用されます。

Oracle Databaseによって、共有プールから問合せサーバー・プロセスにメモリーが割り当てられます。次のように共有プールをチューニングします。

  • 共有プールの他のクライアント(共有カーソルやストアド・プロシージャなど)を考慮します。

  • 大きな値ではマルチユーザー・システムでのパフォーマンスが向上しますが、小さな値ではメモリー使用量が減ることに注意します。

  • その後、パラレル実行で使用されるバッファ数を監視し、shared pool PX msg poolと、ビューV$PX_PROCESS_SYSSTATの出力に示されている現在の最高水位標を比較します。


    注意:

    使用可能な十分なメモリーがない場合は、エラー・メッセージ12853(「PXバッファのメモリーが不足しています: 現在はstringKBですが、最大stringKBが必要です」)が生成されます。これは、PXバッファのためのSGAメモリーが十分でない場合に発生します。少なくとも(MAX - CURRENT)バイトを追加するようにSGAメモリーを再構成する必要があります。

デフォルトでは、Oracle Databaseはパラレル実行バッファを共有プールから割り当てます。

Oracle Databaseで起動時に次のエラーが表示された場合、SHARED_POOL_SIZEの値を、データベースが起動できるように十分に下げる必要があります。

ORA-27102: out of memory 
SVR4 Error: 12: Not enough space 

SHARED_POOL_SIZEの値を下げた後で、次のエラーが発生する場合があります。

ORA-04031: unable to allocate 16084 bytes of shared memory 
   ("SHARED pool","unknown object","SHARED pool heap","PX msg pool") 

その場合は、次の問合せを実行して、Oracle Databaseが16,084バイトを割り当てられなかった理由を判別します。

SELECT NAME, SUM(BYTES) FROM V$SGASTAT WHERE POOL='SHARED POOL' 
  GROUP BY ROLLUP (NAME); 

出力は次のようになります。

NAME                       SUM(BYTES) 
-------------------------- ---------- 
PX msg pool                   1474572 
free memory                    562132
                              2036704 

SHARED_POOL_SIZEを指定したときに、保持するよう指定したメモリー容量がプールよりも大きい場合、Oracle Databaseでは、取得できるメモリーのすべてを割り当てません。一部の領域が残されます。問合せが実行されるとき、Oracle Databaseは必要なメモリーを取得しようとします。Oracle Databaseは560KBを使用し、失敗するとさらに16KBが必要になります。このエラーでは、必要とされた容量の累積は報告されません。必要な追加メモリー容量を判別する最適な方法としては、「メッセージ・バッファのメモリー追加」の式を使用します。

この例の問題を解決するには、SHARED_POOL_SIZEの値を増やします。サンプル出力に表示されるように、SHARED_POOL_SIZEは約2MBです。使用可能なメモリー容量によって異なりますが、SHARED_POOL_SIZEの値を4MBに増やしてから、データベースの起動を試行してください。Oracle Databaseで引き続きORA-4031メッセージが表示される場合は、起動が成功するまでSHARED_POOL_SIZEの値を次第に増やします。

メッセージ・バッファの追加メモリー要件の計算

共有プールの初期設定を決定したら、メッセージ・バッファの追加メモリー要件を計算し、カーソル用に必要な追加領域の容量を決定する必要があります。

メッセージ・バッファのメモリー追加

メッセージ・バッファを収容できるようにSHARED_POOL_SIZEパラメータの値を増やす必要があります。メッセージ・バッファによって、問合せサーバー・プロセスが相互に通信できます。

Oracle Databaseでは、プロデューサ問合せサーバーとコンシューマ問合せサーバーの間の仮想接続ごとに一定数のバッファが使用されます。接続数は、DOPの増加に合せてその2乗の数に増加します。この理由から、パラレル実行で使用されるメモリーの最大容量は、システムで許可されるDOPの最大値によって制限されます。この値を制御するには、PARALLEL_MAX_SERVERSパラメータを使用するか、ポリシーとプロファイルを使用します。

必要なメモリー容量を計算するには、次のいずれかの計算式を使用します。

  • SMPシステム:

    mem in bytes = (3 x size x users x groups x connections)
    
  • Oracle Real Application ClustersおよびMPPシステム:

    mem in bytes = ((3 x local) + (2 x remote)) x (size x users x groups) 
      / instances
    

各インスタンスで、この式で計算されたメモリーが使用されます。

各項目の意味は次のとおりです。

  • SIZE = PARALLEL_EXECUTION_MESSAGE_SIZE

  • USERS = DOPが最適な場合に実行が予想される同時パラレル実行ユーザー数

  • GROUPS = 各問合せで使用される問合せサーバー・プロセス・グループ数

    単純なSQL文で必要になるのは1グループのみです。ただし、問合せに関連する副問合せがパラレルで処理される場合、Oracle Databaseはもう1つの問合せサーバー・プロセス・グループを使用します。

  • CONNECTIONS = (DOP2 + 2 x DOP)

    システムがクラスタまたはMPPの場合は、インスタンス数を考慮する必要があります。インスタンス数によってDOPが増加するためです。つまり、2つのインスタンス・クラスタでDOPを4にすると、結果としてDOPが8になります。控えめな見積りとして、初期値にはPARALLEL_MAX_SERVERSとインスタンス数を掛けて4で割った値を使用することをお薦めします。

  • LOCAL = CONNECTIONS/INSTANCES

  • REMOTE = CONNECTIONS - LOCAL

共有プールの元の設定にこの容量を追加します。ただし、これらのメモリー構造いずれかの値を設定する前に、次の項で説明するカーソル用の追加メモリーも考慮する必要があります。

カーソルの追加メモリーの計算

パラレル実行計画は、シリアル実行計画よりもSQL領域を多く消費します。共有プール・リソース使用状況を定期的に監視して、メッセージとカーソルの両方で使用されるメモリーがシステムの処理要件を満たすことを確認します。

処理開始後のメモリー調整

この項の計算式はあくまで開始値を設定するためのものです。自動チューニングと手動チューニングのどちらを使用するにしても、実行時の使用状況を監視して、メモリーのサイズが大きすぎないか、小さすぎないかを確認する必要があります。正しいメモリー・サイズを確認するため、次の問合せを使用して共有プールをチューニングします。

SELECT POOL, NAME, SUM(BYTES) FROM V$SGASTAT WHERE POOL LIKE '%pool%'
  GROUP BY ROLLUP (POOL, NAME);

出力は次のようになります。

POOL        NAME                       SUM(BYTES) 
----------- -------------------------- ---------- 
shared pool Checkpoint queue                38496 
shared pool KGFF heap                        1964 
shared pool KGK heap                         4372 
shared pool KQLS heap                     1134432 
shared pool LRMPD SGA Table                 23856 
shared pool PLS non-lib hp                   2096 
shared pool PX subheap                     186828 
shared pool SYSTEM PARAMETERS               55756 
shared pool State objects                 3907808 
shared pool character set memory            30260 
shared pool db_block_buffers               200000 
shared pool db_block_hash_buckets           33132 
shared pool db_files                       122984 
shared pool db_handles                      52416 
shared pool dictionary cache               198216 
shared pool dlm shared memory             5387924 
shared pool event statistics per sess      264768 
shared pool fixed allocation callback        1376 
shared pool free memory                  26329104 
shared pool gc_*                            64000 
shared pool latch nowait fails or sle       34944 
shared pool library cache                 2176808 
shared pool log_buffer                      24576 
shared pool log_checkpoint_timeout          24700 
shared pool long op statistics array        30240 
shared pool message pool freequeue         116232 
shared pool miscellaneous                  267624 
shared pool processes                       76896 
shared pool session param values            41424 
shared pool sessions                       170016 
shared pool sql area                      9549116 
shared pool table columns                  148104 
shared pool trace_buffers_per_process     1476320 
shared pool transactions                    18480 
shared pool trigger inform                  24684 
shared pool                              52248968 
                                         90641768 

出力に表示されたメモリー使用量を評価し、処理ニーズに基づいてSHARED_POOL_SIZEの設定を変更します。

メモリー使用量の統計をさらに取得するには、次の問合せを実行します。

SELECT * FROM V$PX_PROCESS_SYSSTAT WHERE STATISTIC LIKE 'Buffers%';

出力は次のようになります。

STATISTIC                           VALUE 
-------------------                 ----- 
Buffers Allocated                   23225 
Buffers Freed                       23225 
Buffers Current                         0 
Buffers HWM                          3620 

使用されたメモリー容量は、Buffers CurrentBuffers HWMの統計に表示されます。バッファ数にPARALLEL_EXECUTION_MESSAGE_SIZEの値を掛けた値(バイト数)を計算します。この最高水位標をパラレル実行メッセージ・プール・サイズと比較して、割当てメモリーが多すぎないかを判別します。たとえば、最初の出力で、px msg poolに示されるラージ・プールの値は38,092,812すなわち38MBです。2番目の出力のBuffers HWMは3,620です。これにパラレル実行メッセージ・サイズの4,096を掛けると、14,827,520すなわち約15MBになります。この場合、最高水位標は容量の約40パーセントに達しています。

リソース消費に影響するパラメータ

この項について検討する前に、『Oracle Databaseパフォーマンス・チューニング・ガイド』および『Oracle Database管理者ガイド』MEMORY_TARGETおよびMEMORY_MAX_TARGET初期化パラメータの説明を読むことをお薦めします。MEMORY_TARGETによってSGAコンポーネントおよびPGAコンポーネントが自動チューニングされるため、PGA_AGGREGATE_TARGET初期化パラメータを設定する必要はありません。

ここで説明するパラメータの最初のグループは、すべてのパラレル操作(特にパラレル実行)のメモリーとリソースの消費に影響します。このパラメータを次に示します。

パラメータの2つ目のサブセットについては、「パラレルDMLおよびパラレルDDLのリソース消費に影響するパラメータ」で説明しています。

リソース消費を制御するには、次の2つのレベルでメモリーを構成する必要があります。

  • データベース・レベル。データベース・システムがオペレーティング・システムの適切な容量のメモリーを使用できるようにします。

  • オペレーティング・システム・レベル(一貫性のため)。

    プラットフォームによっては、使用可能な仮想メモリーの合計容量(全プロセスの合計)を制御するオペレーティング・システム・パラメータを設定する必要があります。

データ・ウェアハウス操作で使用されるメモリーの大きな部分は(OLTPと比べて)動的に使用されます。このメモリーはプロセス・グローバル領域(PGA)から割り当てられ、プロセス・メモリーのサイズとプロセスの数はどちらも幅広い範囲で変化する可能性があります。そのような場合は、PGA_AGGREGATE_TARGET初期化パラメータを使用して、プロセス・メモリーとプロセス数の両方を制御します。PGA_AGGREGATE_TARGETMEMORY_TARGETを合せて明示的に設定すると、自動チューニングは行われますが、PGA_AGGREGATE_TARGETが指定値未満になるようにチューニングされることはありません。

PGA_AGGREGATE_TARGET

自動PGAメモリー管理を有効にすると、PGAメモリーの割当て方法が単純化されて強化されます。このモードでは、DBAによって明示的に設定されたPGAメモリー全体の目標に基づいて、Oracle DatabaseがPGAメモリーの作業領域専用部分のサイズを動的に調整します。自動PGAメモリー管理を有効にするには、PGA_AGGREGATE_TARGET初期化パラメータを設定する必要があります。新しいインストールでは、PGA_AGGREGATE_TARGETおよびSGA_TARGETは自動的にDatabase Configuration Assistant (DBCA)によって設定されます。MEMORY_TARGETは0です。つまり、自動メモリー管理は無効になっています。これはEnterprise Managerの「メモリー・パラメータ」ページで有効にできます。したがって、集計PGAの自動チューニングはデフォルトで有効になっています。ただし、集計PGAは、MEMORY_TARGETを0以外の値に設定して自動メモリー管理を有効にしないかぎり、増えることはありません。

様々なシナリオでのPGA_AGGREGATE_TARGETの使用方法の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

HASH_AREA_SIZE

HASH_AREA_SIZEは非推奨です。かわりにPGA_AGGREGATE_TARGETを使用してください。

SORT_AREA_SIZE

SORT_AREA_SIZEは非推奨です。かわりにPGA_AGGREGATE_TARGETを使用してください。

PARALLEL_EXECUTION_MESSAGE_SIZE

PARALLEL_EXECUTION_MESSAGE_SIZEパラメータでは、パラレル実行メッセージで使用されるバッファのサイズを指定します。デフォルト値はオペレーティング・システムによって異なりますが、通常は16KBです。この値はほとんどのアプリケーションで適切です。

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

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

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

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

I/Oに関連するパラメータ

I/Oに影響するパラメータを次に示します。

これらのパラメータは、パラレル実行I/O操作の最適なパフォーマンスを確保するオプティマイザにも影響します。

DB_CACHE_SIZE

パラレルの更新、マージおよび削除操作を実行するとき、バッファ・キャッシュの動作は、大容量の更新を実行するOLTPシステムと非常によく似ています。

DB_BLOCK_SIZE

このパラメータの推奨値は8KBまたは16KBです。

データベース・ブロック・サイズはデータベースを作成するときに設定します。新しいデータベースを作成する場合は、8KBまたは16KBの大きなブロック・サイズを使用します。

DB_FILE_MULTIBLOCK_READ_COUNT

このパラメータでは、オペレーティング・システムのREADコール1回で読み取られるデータベース・ブロック数を決定します。このリリースでは、このパラメータのデフォルト値は効率よく実行できる最大I/Oサイズに対応する値です。最大I/Oサイズの値はプラットフォームによって異なり、ほとんどのプラットフォームで1MBです。DB_FILE_MULTIBLOCK_READ_COUNTに設定した値が高すぎる場合、データベースの起動時に、オペレーティング・システムによって許容範囲内の最高レベルまで値が下げられます。

DISK_ASYNCH_IOおよびTAPE_ASYNCH_IO

これら2つのパラメータの推奨値はTRUEです。

これらのパラメータを使用して、オペレーティング・システムの非同期I/O機能の有効と無効を切り替えます。これによって、問合せサーバー・プロセスが、表スキャンを実行するときにI/Oリクエストと処理を同時に行うことができます。オペレーティング・システムで非同期I/Oがサポートされる場合は、これらのパラメータをデフォルト値のTRUEにしておきます。図8-6に、非同期読取りの仕組みを示します。

図8-6 非同期読取り

図8-6の説明が続きます
「図8-6 非同期読取り」の説明

非同期操作が現在サポートされているのは、パラレル表スキャン、ハッシュ結合、ソートおよびシリアル表スキャンです。ただし、この機能にはオペレーティング・システム固有の構成が必要となることがあり、すべてのプラットフォームでサポートされるとはかぎりません。