オプティマイザは、文のリソース要件に基づいて文のDOPを自動的に決定します。オプティマイザは実行計画内のすべてのスキャン操作(全表スキャン、索引の高速全スキャンなど)のコストおよびすべての操作のCPUのコストを使用して、その文に必要なDOPを決定します。
ただし、オプティマイザは実際の最大DOPの上限を設定して、多数のパラレル・サーバー・プロセスによってシステムの障害が発生しないようにします。この上限値は、パラメータPARALLEL_DEGREE_LIMIT
で設定されます。このパラメータのデフォルト値はCPU
で、プロセス数はシステム上のCPUの数(PARALLEL_THREADS_PER_CPU
* CPU_COUNT
* 使用可能なインスタンス数)によって制限されることを意味し、デフォルトDOPとも呼ばれます。このデフォルトのDOPにより、1つのユーザー操作でシステムの障害が発生しないようにします。このパラメータの設定を調整することによって、オプティマイザがSQL文に対して選択できるDOPの最大値を制御できます。通常パラメータ値は、パラレル文のキューイングが開始される前にシステムのある程度の同時パラレル処理を確保する下限に設定されます。
オプティマイザによって決定されたDOPは実行計画のNoteセクションに示され(次の実行計画出力を参照)、実行計画文すなわちV$SQL_PLAN
を使用して表示できます。
EXPLAIN PLAN FOR SELECT SUM(AMOUNT_SOLD) FROM SH.SALES; PLAN TABLE OUTPUT Plan hash value: 672559287 ------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost(%CPU) | Time | Pstart | Pstop | ------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 4 | 5 (0) | 00:00:01 | | | | 1 | SORT AGGREGATE | | 1 | 4 | | | | | | 2 | PX COORDINATOR | | 1 | 4 | | | | | | 3 | PX SEND QC(RANDOM) |:TQ10000| 1 | 4 | 5 (0) | | | | | 4 | SORT AGGREGATE | | 1 | 4 | | | | | | 5 | PX BLOCK ITERATOR | | 960 | 3840 | 5 (0) | 00:00:01 | 1 | 16 | | 6 | TABLE ACCESS FULL | SALES | 960 | 3840 | 5 (0) | 00:00:01 | 1 | 16 | -------------------------------------------------------------------------------------------------- Note ----- - Computed Degree of Parallelism is 2