對於一個大的任務,通常的作法是利用一個進程,串行的執行,若是系統資源足夠,能夠採用parallel技術,把一個大的任務分紅若干個小的任務,同時啓用n個進程/線程,並行的處理這些小的任務,這些併發的進程稱爲並行執行服務器(parallel executeion server),這些併發進程由一個稱爲併發協調進程的進程來管理。sql
啓用Parallel前的忠告:只有在須要處理一個很大的任務,如須要幾十分鐘,幾個小時的做業中,而且要有足夠的系統資源的狀況下(這些資源包括cpu,內存,io),您才應該考慮使用parallel。不然,在一個多併發用戶下,系統自己資源負擔已經很大的狀況下,啓用parallel,將會致使某一個會話試圖佔用了全部的資源,其餘會話不得不去等待,從而致使系統系能反而降低的狀況,通常狀況下,oltp系統不要使用parallel,oltp系統中能夠考慮去使用。服務器
Parallel分類session
l 並行查詢parallel query併發
l 並行dml parallel dml pdmloracle
l 並行ddl parallel ddl pddlui
1、 並行查詢spa
並行查詢容許將一個sql select語句劃分爲多個較小的查詢,每一個部分的查詢併發地運行,而後將各個部分的結果組合起來,提供最終的結果,多用於全表掃描,索引全掃描等,大表的掃描和鏈接、建立大的索引、分區索引掃描、大批量插入更新和刪除線程
1. 啓用並行查詢server
SQL> ALTER TABLE T1 PARALLEL;索引
告知oracle,對T1啓用parallel查詢,但並行度要參照系統的資源負載情況來肯定。
利用hints提示,啓用並行,同時也能夠告知明確的並行度,不然oracle自行決定啓用的並行度,這些提示只對該sql語句有效。
SQL> select /*+ parallel(t1 8) */ count(*)from t1;
SQL> select degree from user_tables where table_name='T1';
DEGREE
--------------------
DEFAULT
並行度爲Default,其值由下面2個參數決定
SQL> show parameter cpu
NAME TYPE VALUE
----------------------------------------------- ------------------------------
cpu_count integer 2
parallel_threads_per_cpu integer 2
cpu_count表示cpu數
parallel_threads_per_cpu表示每一個cpu容許的並行進程數
default狀況下,並行數爲cpu_count*parallel_threads_per_cpu
2. 取消並行設置
SQL> alter table t1 noparallel;
SQL> select degree from user_tables wheretable_name='T1';
DEGREE
----------------------------------------
1
3. 數據字典視圖
v$px_session
sid:各個並行會話的sid
qcsid:query coordinator sid,查詢協調器sid
2、 並行dml
並行dml包括insert,update,delete,merge,在pdml期間,oracle可使用多個並行執行服務器來執行insert,update,delete,merge,多個會話同時執行,同時每一個會話(併發進程)都有本身的undo段,都是獨立的一個事務,這些事務要麼由pdml協調器進程提交,要麼都rollback。
在一個有充足I/o帶寬的多cpu主機中,對於大規模的dml,速度可能會有很大的提高,尤爲是在大型的數據倉庫環境中。
並行dml須要顯示的啓用
SQL> alter session enable parallel dml;
Disable並行dml
SQL> alter session disable parallel dml;
3、 並行ddl
並行ddl提供了dba使用所有機器資源的能力,經常使用的pddl有
create table as select ……
create index
alter index rebuild
alter table move
alter table split
在這些sql語句後面加上parallel子句
例
SQL> alter table t1 move parallel;
Table altered
SQL> create index T1_IDX on T1 (OWNER,OBJECT_TYPE)
2 tablespace SYSTEM
3 parallel;
4 ;