oracle的Parallel 並行技術

edwardking888發表於2010-07-09

啟用Parallel前的忠告:只有在需要處理一個很大的任務,如需要幾十分鐘,幾個小時的作業中,並且要有足夠的系統資源的情況下(這些資源包括cpu,記憶體,io),您才應該考慮使用parallel。否則,在一個多併發使用者下,系統本身資源負擔已經很大的情況下,啟用parallel,將會導致某一個會話試圖佔用了所有的資源,其他會話不得不去等待,從而導致系統系能反而下降的情況,一般情況下,oltp系統不要使用parallelolap系統中可以考慮去使用。

 

Parallel分類

l        並行查詢parallel query

l        並行dml parallel dml pdml

 

 

l        並行查詢

並行查詢允許將一個sql select語句劃分為多個較小的查詢,每個部分的查詢併發地執行,然後將各個部分的結果組合起來,提供最終的結果,多用於全表掃描,索引全掃描等,大表的掃描和連線、建立大的索引、分割槽索引掃描、大批量插入更新和刪除

啟用並行查詢

 

告知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

取消並行設定

SQL> alter table t1 noparallel;

SQL> select degree from user_tables where table_name='T1';

 

DEGREE

----------------------------------------

        1

對於一個大的任務,一般的做法是利用一個程式,序列的執行,如果系統資源足夠,可以採用parallel技術,把一個大的任務分成若干個小的任務,同時啟用n個程式/執行緒,並行的處理這些小的任務,這些併發的程式稱為並行執行伺服器(parallel executeion server),這些併發程式由一個稱為併發協調程式的程式來管理。

啟用Parallel前的忠告:只有在需要處理一個很大的任務,如需要幾十分鐘,幾個小時的作業中,並且要有足夠的系統資源的情況下(這些資源包括cpu,記憶體,io),您才應該考慮使用parallel。否則,在一個多併發使用者下,系統本身資源負擔已經很大的情況下,啟用parallel,將會導致某一個會話試圖佔用了所有的資源,其他會話不得不去等待,從而導致系統系能反而下降的情況,一般情況下,oltp系統不要使用paralleloltp系統中可以考慮去使用。

 

Parallel分類

l        並行查詢parallel query

l        並行dml parallel dml pdml

l        並行ddl parallel ddl pddl

 

l        並行查詢

並行查詢允許將一個sql select語句劃分為多個較小的查詢,每個部分的查詢併發地執行,然後將各個部分的結果組合起來,提供最終的結果,多用於全表掃描,索引全掃描等,大表的掃描和連線、建立大的索引、分割槽索引掃描、大批量插入更新和刪除

 

啟用並行查詢

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

 

取消並行設定

SQL> alter table t1 noparallel;

SQL> select degree from user_tables where table_name='T1';

 

DEGREE

----------------------------------------

        1

 

資料字典檢視

v$px_session

sid:各個並行會話的sid

qcsidquery coordinator sid,查詢協調器sid

 

l        並行dml

並行dml包括insertupdatedeletemerge,在pdml期間,oracle可以使用多個並行執行伺服器來執行insertupdatedeletemerge,多個會話同時執行,同時每個會話(併發程式)都有自己的undo段,都是獨立的一個事務,這些事務要麼由pdml協調器程式提交,要麼都rollback

在一個有充足I/o頻寬的多cpu主機中,對於大規模的dml,速度可能會有很大的提升,尤其是在大型的資料倉儲環境中。

並行dml需要顯示的啟用

SQL> alter session enable parallel dml;

 

Disable並行dml

SQL> alter session disable parallel dml;

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183550/viewspace-667633/,如需轉載,請註明出處,否則將追究法律責任。

相關文章