Oracle Parallel 多線程

對於一個大的任務,通常的作法是利用一個進程,串行的執行,若是系統資源足夠,能夠採用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        ;

相關文章
相關標籤/搜索