oracle px msg pool,oracle並行之概念篇

概念

串行執行:串行執行時候,sql語句由一個server process處理(既只運行在一個cpu上),所以sql語句所能使用的資源受cpu限制,除去異步i/o外server process

處理cpu操作時,不可訪問disk。

並行處理:就是多個slave process一起處理同一個sql語句,server process充當query coordinator(創建slave process,分配任務,收集合並slave process傳的結果返回給client)。

並行執行工作粒度:

1.分區粒度(paratition granule):一個分區 或一個子分區 為一個工作內容被分配(分區segment上)。就是操作PX BLOCK ITERATOR。2.塊范圍粒度(block range granule):segment上一個范圍內的block,運行時動態定義(不是parse時)。就是操作PX PARTION  ITERATOR。

注釋:

*oracle傾向於block range granule,因為block range granule可以讓slave process們得到的工作量比較平均,而分區粒度 有可能會使有的slave process得到的分區的工作量很大,導致時間響應更長會影響到並行執行的總效率。

*sql語句執行2個或2個以上獨立的操作(比如,非相關性操作join,scan(如全表掃描等)&order by這樣會使用2組slave process,一組scan,一組order by)

*按scan&order by這個例 子,2組slave process,第一組select,那么select中的並行(slave process 操作)叫操作內並行,即單個操作內並行化。那么scan與order by就是2次操作內並行。

*2組slave process用來執行一個sql語句 叫操作間並行(組1 sacn ,組2 orderby 之間操作就是操作間並行)。

*操作間並行時,會有多組slave process通信,例如組1scan數據 給組2orderby,組1就是生產者(producer),組2就是消費者(consumer),按生產者與消費者執行的。

不同操作,就會選擇不同的分配(數據)記錄方式給另一個操作:

1.廣播:每個生產者發送所有數據給消費者

2.range:生產者將執定范圍的記錄發給不同的消費者,會應用動態范圍分區決定哪條記錄給哪個消費者(對於orde by操作根據order by子句中字段range分區)

3.loop:記錄會被平均分給每個消費者(即生產者每loop循環一次,就給一個消費者發一條記錄)

4.hash:生產者用hash函數發送數據給消費者,動態應用hash分區來決定哪條記錄給哪個消費者(對於group by根據group by子句使用的字段進行hash )

5.qc隨機:每個生產者將所有記錄發給query coordinator(隨機),這是常用方法

6.qc順序:每個生產者將所有記錄發給query coordinator(順序很重要),並行orderby用這個給query coordinator(server process)發送數據

#上面的廣播方法就是執行計划中 px send qc(random/order)操作或是px send(qc 隨機)操作 , 其父操作就是px coordator(查詢調度)。

上面的range/hash/loop就是執行計划中px send qcrange/hash/loop  操作 ,其父操作就是px recive(接收者,消費者)。

並行操作間關系(執行計划中in-out部分)

p-s:並行發送數據給串行

p-p:(有2組slaves process時使用),一個並行操作將數據發送給另一個並行操作

pcwp:相同slave process並行執行一個操作及其父操作,無通訊

pcwc:相同slave process並行執行一個操作及其子操作,無通訊

s-p:串行發送數據給並行,效率差(1.單一進程產生數據沒有多個進程消費數據快,消費者花很多時間等數據而不是處理數據;2.串行執行操作和並行執行操作發送數據有一些不必要的通訊)

參數控制並行:

1.parallel_min_servers:

instance 啟動數據庫實例時就會自動創建的slaves process數量,這樣當server process請求時候就不需要重新創建了,直接使用就可以。當server process請求的數量超過這個設置值時,就會創建新的slave process,新創建的在使用完成后會在slave process pool(oracle會管理一個slave process pool,query coordinator process既server process從這個pool中請求slave process,sql語句開始使用,使用后slave process返回pool)。

保存5分鍾若還未人使用 就釋放,所以 參數parallel_min_servers控制這個pool中啟始slave process數量,defalut 0,表示需要時候才創建。

什么時候需要修改該參數:一般在出現os thread startup 這個event(表示sql語句花時間等待slave process)才修改這個值。

2.parallel_max_server:

控制pool中slave process最大數量(可以設置成cpu_count ,8-10倍)。

若parallel_adaptive_multi_user(為boolean 類型的參數)為TRUE (10G default為TRUE)時,僅允許有限數目的用戶按默認的並行程度運行。

這個限度由_parallel_adaptive_max_users控制。 _parallel_adaptive_max_users表示maximum number of users running with default DOP。例如,_parallel_adaptive_max_users為 2,即 指定 現在顯示為2個USER。

#查看server process pool狀態

SQL> select * from v$px_process_sysstat where upper(statistic) like ‘SERVER%’;

STATISTIC VALUE

—————————— ———-

Servers In Use 0~~使用的

Servers Available 2~~

Servers Started 2~~~啟動過幾個

Servers Shutdown 0

Servers Highwater 2~~~最高到達

Servers Cleaned Up 0

Server Sessions 2

7 rows selected.

*sga中有一個table queue內存給消費者發送數據,每對(生產者&消費者)對應一個table queue處理2組從屬進程間通信,table queue 可以放在shared pool,也可以large pool

(其實table queue就是 px msg pool),當10G SGA_TARGET>0 or 11g memory_target>0時 都是存在large pool,parallel_automatic_tuning=true放在large pool,10G 默認為TRUE,11g

默認就是放在large pool,parallel_automatic_tuning在11G已經廢棄向后兼容保留了(The PARALLEL_AUTOMATIC_TUNING parameter is deprecated. It is retained for backward compatibility only.)

關於這個parallel_automatic_tuning更詳細的說明

When PARALLEL_AUTOMATIC_TUNING is set to true, Oracle determines the default values for parameters that control parallel execution. In addition to setting this parameter, you must specify the PARALLEL clause for the target tables in the system. Oracle then tunes all subsequent parallel operations automatically.

If you used parallel execution in a previous release and are now enabling PARALLEL_AUTOMATIC_TUNING, then you should reduce the amount of memory allocated from the shared pool to account for the decreased demand on that pool. This memory will now be allocated from the large pool, and will be computed automatically if LARGE_POOL_SIZE is not specified.

As part of the automatic tuning, Oracle will enable the PARALLEL_ADAPTIVE_MULTI_USER parameter. You can override any of the system-provided defaults if desired.

每個table queue由3個buffer (塊)組成,在rac里為4個。每個buffer大小由parallel_execution_message_size控制,默認為2152bytes,parallel_automatic_tuning=true,parallel_execution_message_size=4096 bytes。

可以設置大點16k,32k,64K(內存要足夠)

#########large pool size

large_pool_size>=parallel_max_servers^2.parallel_execution_message_size.3(rac .4)

SQL> select * from v$sgastat where upper(name)=’PX MSG POOL’;

POOL NAME BYTES

———— ————————– ———-

large pool PX msg pool 902160

所以可以認為table queue就是px msg pool

SQL> select pool,name ,bytes/1024/1024/1024 from v$sgastat where upper(pool) like ‘%LARGE%’;

POOL NAME BYTES/1024/1024/1024

———— ————————– ——————–

large pool PX msg pool .000840202

large pool free memory .003066048

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值