8.2 並列度の設定

並列度(DOP)は、単一の処理に対応付けられるパラレル実行サーバーの数で表されます。

パラレル実行は複数のCPUを効率よく使用するためのものです。Oracle Databaseのパラレル実行フレームワークでは、特定の並列度をユーザーが明示的に選択することも、Oracle Databaseによって自動的に並列度を制御することもできます。

この項では、次の項目について説明します。

8.2.1 手動での並列度の指定

表および索引に対して、Oracle Databaseで特定の並列度(DOP)をリクエストできます。

たとえば、次のように表レベルで固定DOPを設定できます。

ALTER TABLE sales PARALLEL 8;
ALTER TABLE customers PARALLEL 4;

この例では、sales表のみにアクセスする問合せはDOPである8をリクエストし、customers表にアクセスする問合せはDOPとして4をリクエストします。sales表とcustomers表の両方にアクセスする問合せは、DOPが8として処理され、16個のパラレル実行サーバーを割り当てる可能性があります(プロデューサ/コンシューマ・モデルのため)。Oracle Databaseでは、異なるDOPが指定されるときは必ず、高いほうのDOPが使用されます。

文レベルまたはオブジェクト・レベルのパラレル・ヒントを使用することで、特定のDOPをリクエストすることもできます。

表または索引のPARALLEL句で指定されたDOPは、PARALLEL_DEGREE_POLICYMANUALまたはLIMITEDに設定されている場合のみ有効となります。

文の実際の実行時のDOPは、Oracle Database Resource Managerで制限できます。

関連項目:

8.2.2 デフォルトの並列度

PARALLEL句が指定されているが並列度(DOP)の指定がない場合、オブジェクトのDOPはデフォルトになります。

たとえば、次のSQL文により、表をデフォルトのDOPに設定できます。

ALTER TABLE sales PARALLEL;

デフォルトの並列処理では、次に示すように、計算式が使用され、システム構成に基づいてDOPが決定されます。

  • シングル・インスタンスの場合、DOP = PARALLEL_THREADS_PER_CPU x CPU_COUNT

  • Oracle RAC構成の場合、DOP = PARALLEL_THREADS_PER_CPU x sum(CPU_COUNT)

デフォルトでは、sum(CPU_COUNT)は、クラスタ内のCPUの合計数です。ただし、Oracle RACサービスを使用して1つのパラレル操作で実行可能なノードの数を制限している場合は、sum(CPU_COUNT)は、そのサービスに属するすべてのノードにわたるCPUの合計数になります。たとえば、ノード4つのOracle RACクラスタで、各ノードに8個のCPUコアがあり、Oracle RACサービスがない場合、デフォルトのDOPは2 x (8+8+8+8) = 64になります。

文レベルまたはオブジェクト・レベルのパラレル・ヒントを使用することで、デフォルトのDOPをリクエストすることもできます。

表または索引のPARALLEL句で指定されたデフォルトDOPは、PARALLEL_DEGREE_POLICYMANUALに設定されている場合のみ有効となります。

デフォルトのDOPアルゴリズムは、最大限のリソースを使用するように設計されており、操作で使用できるリソースが多いほど、操作は速く終了すると想定しています。デフォルトDOPは、単一ユーザーのワークロードが対象となるため、複数ユーザーの環境ではお薦めできません。

SQL文の実際の実行時のDOPは、Oracle Database Resource Managerで制限できます。

関連項目:

8.2.3 自動並列度

自動並列度(自動DOP)により、Oracle Databaseで、文をパラレルで実行する必要があるかどうかと、使用する必要があるDOPを自動的に決定できます。

次に、自動DOPが有効になっている場合のパラレル文処理の概要を示します。

  1. SQL文が発行されます。

  2. 文が解析され、オプティマイザが実行計画を決定します。

  3. 初期化パラメータPARALLEL_MIN_TIME_THRESHOLDによって指定されたしきい値がチェックされます。

    1. 予想される実行時間がしきい値より短い場合は、SQL文はシリアルで実行されます。

    2. 予想される実行時間がしきい値より長い場合は、定義されたリソース制限の考慮を含むオプティマイザが計算するDOPに基づいて文はパラレルで実行されます。

8.2.4 自動DOPでの並列度の決定

自動並列度(DOP)の使用時は、オプティマイザは、文のリソース要件に基づいて文のDOPを自動的に決定します。

オプティマイザは、全表スキャンや索引の高速全スキャンなど、実行計画内のすべてのスキャン操作のコスト、およびすべての操作のCPU操作のコストを使用して、必要なDOPを決定します。

ただし、オプティマイザは、実際の最大DOPの上限を設定して、多数のパラレル実行サーバーによってシステムの障害が発生しないようにします。この上限値は、パラメータPARALLEL_DEGREE_LIMITで設定されます。このパラメータのデフォルト値はCPUです。これは、デフォルトDOPとも呼ばれ、DOPがシステム上のCPUの数(PARALLEL_THREADS_PER_CPU * sum(CPU_COUNT))によって制限されることを意味します。このデフォルトのDOPにより、1つのユーザー操作でシステムの障害が発生しないようにします。このパラメータの設定を調整することによって、オプティマイザがSQL文に対して選択できるDOPの最大値を制御できます。オプティマイザでは、DOPの制限にOracle Database Resource Managerが使用される場合に選択できる最大DOPを、さらに制限できます。

ノート:

PARALLEL_DEGREE_LIMITの値AUTOには、値CPUと同じ機能があります。

SQL文の処理のコストを計算するために、自動DOPでは、システムのハードウェア特性に関する情報が使用されます。ハードウェア特性にはI/Oキャリブレーション統計が含まれるため、これらの統計を収集する必要があります。

必要な統計を収集するようI/Oキャリブレーションが実行されていない場合、デフォルトのキャリブレーション値を使用して操作コストおよびDOPが計算されます。

I/Oキャリブレーション統計は、PL/SQL DBMS_RESOURCE_MANAGER.CALIBRATE_IOプロシージャを使用して収集できます。I/Oキャリブレーションは、ハードウェアの物理的な交換を行わないかぎり、1回のみの処理です。

オプティマイザによって決定されたDOPは、次の実行計画出力で示すように、実行計画出力のNoteセクションに示され、実行計画文またはV$SQL_PLANのどちらかを使用して表示できます。

EXPLAIN PLAN FOR
SELECT SUM(AMOUNT_SOLD) FROM SH.SALES;

PLAN TABLE OUTPUT
Plan hash value: 1763145153

----------------------------------------------------------------------------------------------------------------------
|Id| Operation              | Name     | Rows | Bytes| Cost (%CPU)| Time     | Pstart| Pstop|    TQ |IN-OUT| PQ Distrib |
------------------------------------------------------------------------------------------------------------------------
| 0| SELECT STATEMENT       |          |     1|     4|     2   (0)| 00:00:01 |       |       |      |      |           |
| 1|  SORT AGGREGATE        |          |     1|     4|            |          |       |      |       |      |           |
| 2|   PX COORDINATOR       |          |      |      |            |          |       |      |       |      |           |
| 3|    PX SEND QC (RANDOM) | :TQ10000 |     1|     4|            |          |       |      |  Q1,00| P->S | QC (RAND) |
| 4|     SORT AGGREGATE     |          |     1|     4|            |          |       |      |  Q1,00| PCWP |           |
| 5|      PX BLOCK ITERATOR |          |   960|  3840|     2   (0)| 00:00:01 |     1 |    16|  Q1,00| PCWC |           |
| 6|       TABLE ACCESS FULL| SALES    |   960|  3840|     2   (0)| 00:00:01 |     1 |    16|  Q1,00| PCWP |           |
------------------------------------------------------------------------------------------------------------------------
Note
-----
   - automatic DOP: Computed Degree of Parallelism is 4

関連項目:

DBMS_RESOURCE_MANAGERパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください

8.2.5 自動並列度の制御

自動DOPを制御するのは、PARALLEL_DEGREE_POLICYPARALLEL_DEGREE_LIMITおよびPARALLEL_MIN_TIME_THRESHOLD初期化パラメータです。

初期化パラメータPARALLEL_DEGREE_POLICYは、自動DOP、パラレル文のキューイング、およびインメモリー・パラレル実行を有効にするかどうかを制御します。このパラメータには、次の値を指定できます。

  • MANUAL

    この設定では、自動DOP、パラレル文のキューイング、およびインメモリー・パラレル実行が無効になります。パラレル実行の動作をOracle Database 11gリリース2 (11.2)よりも前の設定に戻します。これがデフォルトです。

    PARALLEL_DEGREE_POLICYのデフォルト設定MANUALの使用時は、DOPがオブジェクトに明示的に設定されている場合、またはパラレル・ヒントがSQL文に指定されている場合にかぎり、パラレル実行が使用されます。使用されるDOPは、指定されたとおりのものになります。パラレル文のキューイング、およびインメモリー・パラレル実行は起こりません。

  • LIMITED

    この設定では、一部の文については自動DOPが有効になりますが、パラレル文のキューイングおよびインメモリー・パラレル実行は無効になります。自動DOPは、明示的にDOPを指定することなく、PARALLEL句で明示的に宣言されている表または索引にアクセスする文に対してのみ適用されます。特定のDOPが指定された表および索引は、その明示的なDOP設定を使用します。

    Oracle Databaseでオブジェクトの特定のサブセットにアクセスするSQL文のサブセットに対してのみDOPを自動的に決定するようにする場合は、PARALLEL_DEGREE_POLICYLIMITEDに設定し、明示的なDOPを指定せずに、そのオブジェクト・サブセットにパラレル・プロパティを設定します。

  • AUTO

    この設定では、すべての文について自動DOPが有効になり、パラレル文のキューイングおよびインメモリー・パラレル実行も有効になります。

    Oracle DatabaseですべてのSQL文のDOPを自動的に決定するようにする場合は、PARALLEL_DEGREE_POLICYAUTOに設定します。

  • ADAPTIVE

    この設定では、AUTO値と同様に、自動DOP、パラレル文のキューイング、およびインメモリー・パラレル実行が有効になります。さらに、パフォーマンス・フィードバックを使用可能にします。

PARALLEL_DEGREE_LIMIT初期化パラメータは、システム全体にわたり自動DOPで使用できる、最大DOPを指定します。最大DOPの非常に細かい制御には、Oracle Database Resource Managerを使用できます。

PARALLEL_MIN_TIME_THRESHOLD初期化パラメータは、文を自動DOPの対象とするための最小推定実行時間を指定します。最初に、オプティマイザで、SQL文のシリアル実行計画が計算されます。推定された実行時間がPARALLEL_MIN_TIME_THRESHOLDの値より長い場合、その文は自動DOPの候補となります。

文レベルまたはオブジェクト・レベルの適切なSQLヒントを指定することで、自動DOPをリクエストすることもできます。

関連項目:

8.2.6 問合せ調整並列処理

マルチユーザー問合せ調整アルゴリズムでは、システムの負荷が増加すると並列度が低下します。

Oracle Databaseの問合せ調整並列処理を使用すると、データベースはSQL実行時にアルゴリズムを使用して、パラレル操作がリクエストどおりのDOPを受け取るか、低いDOPに下げてシステムのオーバーロードを回避するかを決定します。

高いDOPを使用してパラレル実行を積極的に利用するシステムでは、問合せ調整アルゴリズムによってDOPが下がるのは、ごく少数の操作がパラレルで実行する場合のみです。このアルゴリズムでは最適なリソース使用率が保証されますが、ユーザーによってレスポンス時間が一定しないことがあります。確定したレスポンス時間を必要とする環境では問合せ調整並列処理のみを使用することはお薦めしません。問合せ調整並列処理は、データベース初期化パラメータPARALLEL_ADAPTIVE_MULTI_USERを介して制御されます。

ノート:

初期化パラメータPARALLEL_ADAPTIVE_MULTI_USERは、Oracle Database 12cリリース2 (12.2.0.1)で非推奨となり、将来のリリースではサポートされなくなるため、かわりにパラレル文のキューイングを使用することをお薦めします。