Parallel to Serial(P->S):
表示一個並行操作發送數據給一個串行操作,通常是並行進程將數據發給並行調度進程
Parallel to Parallel(P->P):
表示一個並行進程操作向另一個並行操作發送數據。通常是兩個從屬進程之間的數據交流。
Parallel Combined With Parent(PCWP):
同一個從屬進程執行的並行操作,同時父操作也是並行的。
Parallel Combined With Child(PCWC):
同一個從屬進程執行的並行操作,子操作也是並行的。
Serial to Parallel(S->P):
一個串行操作發送數據給並行操作
關於並行相關的初始化參數:
parallel_max_servers
如果並行度的值大於parallel_min_servers或者當前可用的並行服務器進程
不能滿足Sql的並行執行要求,ORACLE將創建新的並行服務器進程,當前實例
總共啓動的並行服務進程不超過這個參數的設定。
parallel_adaptive_multi_user= [true|false]
默認開啓,ORACLE會根據sql執行時的負載情況,動態的調整sql的並行度。以
取得最好的性能。
parallel_min_percent
是一個百分比數值。11gR2默認爲0。如果當前的並行服務進程不足,按照百分比申請所需的
並行服務器進程。
例如:當前參數值爲50。假設一個sql需申請20個並行服務進程時,當前的並行服務進程不足,
按這個參數要求,sql必須申請到20*50%=10個並行服務器進程,如果申請不到這個數量,
會報出 ora-12827錯誤
12827, 00000, "insufficient parallel query slaves (requested %s, available %s, parallel_min_percent %s)"
// *Cause: PARALLEL_MIN_PERCENT parameter was specified and fewer than
// the minimum number of slaves were acquired
// *Action: Either reexecute the query with a lower PARALLEL_MIN_PERCENT or
// wait until some running queries are completed, thus freeing
// up slaves
以下的這個parallel_min_percent官方說明。
PARALLEL_MIN_PERCENT lets you specify the minimum percentage of the requested number of parallel
execution processes required for parallel execution. Setting this parameter ensures that parallel operations will not execute unless adequate resources are available.
The default value of 0 means that no minimum percentage of processes has been set.
Consider the following settings:
PARALLEL_MIN_SERVERS = 5
PARALLEL_MAX_SERVERS = 10
If 8 of the 10 parallel execution processes are busy, only 2 processes are available. If you then request a query with a degree of parallelism of 8, the minimum 50% will not be met.
You can use this parameter in conjunction with PARALLEL_ADAPTIVE_MULTI_USER. In a multi-user environment, an individual user or application can set PARALLEL_MIN_PERCENT to a minimum value until sufficient resources are available on the system and an acceptable degree of parallelism is returned.
--簡單測試 dml parallel
--session
--默認degree=1
SQL> select distinct sid from v$mystat;
SID
----------
85
--session沒有 enable parallel dml
SQL> select pdml_enabled from v$session where sid =85;
PDM
---
NO
SQL> show parameter PARALLEL_ADAPTIVE_MULTI_USER;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
parallel_adaptive_multi_user boolean TRUE
SQL> show parameter parallel_min;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
parallel_min_percent integer 0
parallel_min_servers integer 0
parallel_min_time_threshold string AUTO
--創建測試表t,沒有更改表屬性parallel
SQL> create table t as select * from dba_objects;
Table created.
SQL> select degree from user_tables where table_name ='T';
DEGREE
--------------------
1
SQL> set autotrace trace;
SQL> set linesize 1000;
--hint 開啓parallel會啓動並行處理
SQL> delete /*+parallel(2)*/ from t;
75381 rows deleted.
Execution Plan
----------------------------------------------------------
Plan hash value: 1038566389
-------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
-------------------------------------------------------------------------------------------------------
| 0 | DELETE STATEMENT | | 1 | 166 (0)| 00:00:01 | | | |
| 1 | DELETE | T | | | | | | |
| 2 | PX COORDINATOR | | | | | | | |
| 3 | PX SEND QC (RANDOM)| :TQ10000 | 1 | 166 (0)| 00:00:01 | Q1,00 | P->S | QC (RAND) |
| 4 | PX BLOCK ITERATOR | | 1 | 166 (0)| 00:00:01 | Q1,00 | PCWC | |
| 5 | TABLE ACCESS FULL| T | 1 | 166 (0)| 00:00:01 | Q1,00 | PCWP | |
-------------------------------------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement (level=2)
- Degree of Parallelism is 2 because of hint
Statistics
----------------------------------------------------------
136 recursive calls
84329 db block gets
1267 consistent gets
0 physical reads
28475984 redo size
840 bytes sent via SQL*Net to client
782 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
75381 rows processed
SQL> rollback;
Rollback complete.
--不加hint 因爲表degree爲1,沒有默認啓用parallel
SQL> delete from t;
75381 rows deleted.
Execution Plan
----------------------------------------------------------
Plan hash value: 2034385699
-------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------
| 0 | DELETE STATEMENT | | 1 | 300 (1)| 00:00:04 |
| 1 | DELETE | T | | | |
| 2 | TABLE ACCESS FULL| T | 1 | 300 (1)| 00:00:04 |
-------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement (level=2)
Statistics
----------------------------------------------------------
157 recursive calls
84351 db block gets
1218 consistent gets
0 physical reads
28476808 redo size
842 bytes sent via SQL*Net to client
765 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
75381 rows processed
SQL> rollback;
Rollback complete.
--更改parallel值,再測試一次,執行計劃並沒有更改並行度
SQL> delete /*+parallel(8)*/ from t;
75381 rows deleted.
Execution Plan
----------------------------------------------------------
Plan hash value: 1038566389
-------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
-------------------------------------------------------------------------------------------------------
| 0 | DELETE STATEMENT | | 1 | 42 (0)| 00:00:01 | | | |
| 1 | DELETE | T | | | | | | |
| 2 | PX COORDINATOR | | | | | | | |
| 3 | PX SEND QC (RANDOM)| :TQ10000 | 1 | 42 (0)| 00:00:01 | Q1,00 | P->S | QC (RAND) |
| 4 | PX BLOCK ITERATOR | | 1 | 42 (0)| 00:00:01 | Q1,00 | PCWC | |
| 5 | TABLE ACCESS FULL| T | 1 | 42 (0)| 00:00:01 | Q1,00 | PCWP | |
-------------------------------------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement (level=2)
- Degree of Parallelism is 8 because of hint
Statistics
----------------------------------------------------------
202 recursive calls
84363 db block gets
1712 consistent gets
0 physical reads
28477364 redo size
842 bytes sent via SQL*Net to client
782 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
75381 rows processed
SQL> drop table t purge;
Table dropped.
--創建 degree爲4 table
SQL> create table t parallel 4 as select * from dba_objects;
Table created.
SQL> set autotrace off;
SQL> select degree from user_tables where table_name ='T';
DEGREE
--------------------
4
SQL> set autotrace trace;
--默認會啓動並行,無需手工hint
SQL> delete from t;
75381 rows deleted.
Execution Plan
----------------------------------------------------------
Plan hash value: 1038566389
-------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
-------------------------------------------------------------------------------------------------------
| 0 | DELETE STATEMENT | | 1 | 87 (0)| 00:00:02 | | | |
| 1 | DELETE | T | | | | | | |
| 2 | PX COORDINATOR | | | | | | | |
| 3 | PX SEND QC (RANDOM)| :TQ10000 | 1 | 87 (0)| 00:00:02 | Q1,00 | P->S | QC (RAND) |
| 4 | PX BLOCK ITERATOR | | 1 | 87 (0)| 00:00:02 | Q1,00 | PCWC | |
| 5 | TABLE ACCESS FULL| T | 1 | 87 (0)| 00:00:02 | Q1,00 | PCWP | |
-------------------------------------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement (level=2)
Statistics
----------------------------------------------------------
30 recursive calls
84222 db block gets
1625 consistent gets
0 physical reads
28474736 redo size
845 bytes sent via SQL*Net to client
765 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
75381 rows processed