溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

oracle 之 控制oracle RAC 進(jìn)行并行運(yùn)算

發(fā)布時(shí)間:2020-08-04 18:47:07 來(lái)源:ITPUB博客 閱讀:142 作者:張沖andy 欄目:關(guān)系型數(shù)據(jù)庫(kù)

 RAC的一大優(yōu)點(diǎn)就是可以跨節(jié)點(diǎn)進(jìn)行并行計(jì)算,那么如何控制并行運(yùn)算?這就是這篇文章要討論的內(nèi)容。

10 g 中:

合理設(shè)置跨節(jié)點(diǎn)并行,需要先設(shè)置一些參數(shù):
instance_groups:這個(gè)參數(shù)主要是設(shè)置該節(jié)點(diǎn)實(shí)例是否屬于某一個(gè)實(shí)例組。每個(gè)節(jié)點(diǎn)可以設(shè)置多個(gè)不同的實(shí)例組名,實(shí)例組名用逗號(hào)隔開。
parallel_instance_group設(shè)置的值為instance_groups里面設(shè)置的值,表明這個(gè)節(jié)點(diǎn)上面進(jìn)行的并行操作可以跨越哪些實(shí)例組。

alter system set instance_groups='dw','dw1','dw123','dw124','dw134' scope=spfile sid='dwrac1';
alter system set instance_groups='dw','dw2','dw123','dw124','dw234' scope=spfile sid='dwrac2';
alter system set instance_groups='dw','dw3','dw123','dw134','dw234' scope=spfile sid='dwrac3';
alter system set instance_groups='dw','dw4','dw124','dw134','dw234' scope=spfile sid='dwrac4';

以上參數(shù)分別為4個(gè)節(jié)點(diǎn)定義了5個(gè)instance group,有的group包含多個(gè)節(jié)點(diǎn),有的group只包含一個(gè)節(jié)點(diǎn)。

一、跨所有節(jié)點(diǎn)執(zhí)行

分兩種情況進(jìn)行測(cè)試:instance_groups包含所有節(jié)點(diǎn)和instance_groups只包含一個(gè)節(jié)點(diǎn)。

1. instance_groups包含所有節(jié)點(diǎn)

1). 節(jié)點(diǎn)2參數(shù)設(shè)置情況
admin@dwrac2> show parameter instance_group

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_groups string dw, dw2, dw123, dw124, dw234
parallel_instance_group string

只定義了instance_groups,不設(shè)置parallel_instance_group。
前面我們?cè)O(shè)置過(guò),dw這個(gè)instance_group包含了所有的節(jié)點(diǎn)。

2). 在節(jié)點(diǎn)2發(fā)出查詢
admin@dwrac2> select /*+ parallel(a,128) */count(1) from testuser.big_table a;

3). 另開一個(gè)窗口查詢并行進(jìn)程情況
SQL> select INST_ID,COUNT(1) from gv$px_session p where (p.inst_id,p.sid) in (select s.inst_id,s.sid from gv$session s where s.username='ADMIN' and module like 'SQL*%') GROUP BY INST_ID;

INST_ID COUNT(1)
---------- ----------
1 32
2 33
4 32
3 32

可以看到,并行會(huì)話(parallel slaves)平均分配到4個(gè)節(jié)點(diǎn)上。節(jié)點(diǎn)2多一個(gè)進(jìn)程是因?yàn)樗遣⑿胁樵兊陌l(fā)起者,額外的會(huì)話是發(fā)起會(huì)話,也就是并行查詢協(xié)調(diào)器(parallel query coordinator),其余的是并行從屬進(jìn)程。
之所有能分配到4個(gè)節(jié)點(diǎn)上,是因?yàn)?個(gè)節(jié)點(diǎn)都屬于dw這個(gè)instance group,且都沒(méi)有設(shè)定parallel_instance_group。

2. instance_groups只包含一個(gè)節(jié)點(diǎn)

1). 修改參數(shù)
admin@dwrac2> alter system set instance_groups='dw2' scope=spfile sid='dwrac2';

重啟

admin@dwrac2> show parameter instance_group

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_groups string dw2
parallel_instance_group string

不設(shè)置parallel_instance_group,且instance_group=dw2只包含節(jié)點(diǎn)2.

2). 發(fā)出并行查詢
admin@dwrac2> select /*+ parallel(a,128) */count(1) from testuser.big_table a;

3). 另開一個(gè)窗口查詢并行進(jìn)程情況

SQL> select INST_ID,COUNT(1) from gv$px_session p where (p.inst_id,p.sid) in (select s.inst_id,s.sid from gv$session s where s.username='ADMIN' and module like 'SQL*%') GROUP BY INST_ID;

INST_ID COUNT(1)
---------- ----------
1 32
2 33
4 32
3 32

可以看到,即使是instance_groups='dw2'只在節(jié)點(diǎn)2出現(xiàn),但是如果不設(shè)置parallel_instance_group,并行仍然可以跨越所有節(jié)點(diǎn)。

二、跨部分節(jié)點(diǎn)執(zhí)行

這部分分兩種測(cè)試:發(fā)出命令的節(jié)點(diǎn)屬于parallel_instance_group的一員以及發(fā)出命令的節(jié)點(diǎn)不屬于parallel_instance_group
1. 發(fā)出命令的節(jié)點(diǎn)屬于parallel_instance_group的一員
1). 在節(jié)點(diǎn)2修改參數(shù)

admin@dwrac2> show parameter instance_group

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_groups string dw, dw2, dw123, dw124, dw234
parallel_instance_group string

admin@dwrac2> alter session set parallel_instance_group='dw2';

Session altered.

--這個(gè)設(shè)置的會(huì)強(qiáng)制并行操作只會(huì)屬于dw2這個(gè)instance group的節(jié)點(diǎn)中執(zhí)行。
--注意:parallel_instance_group是大小寫區(qū)分的,如果用alter session set parallel_instance_group=dw2,則不會(huì)起任何并行進(jìn)程,因?yàn)椴患訂我?hào)的話,實(shí)際上載后臺(tái)dw2會(huì)被轉(zhuǎn)換成大寫的DW2,不屬于任何一個(gè)instance group。


2). 在節(jié)點(diǎn)2發(fā)出同樣的查詢
admin@dwrac2> select /*+ parallel(a,128) */ count(1) from testuser.big_table a;

3). 另起一個(gè)會(huì)話查詢并行情況

SQL> select INST_ID,COUNT(1) from gv$px_session p where (p.inst_id,p.sid) in (select s.inst_id,s.sid from gv$session s where s.username='ADMIN' and module like 'SQL*%') GROUP BY INST_ID;

INST_ID COUNT(1)
---------- ----------
2 129

可以看到,因?yàn)橹挥泄?jié)點(diǎn)2屬于dw2這個(gè)instance group,所有并行會(huì)話都分布在節(jié)點(diǎn)2上。


2. 發(fā)出命令的節(jié)點(diǎn)不屬于parallel_instance_group

1) 在節(jié)點(diǎn)2修改參數(shù)
admin@dwrac2> show parameter instance_group

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_groups string dw, dw2, dw123, dw124, dw234
parallel_instance_group string

admin@dwrac2> alter session set parallel_instance_group='dw1';

Session altered.

根據(jù)我們之前的設(shè)置,只有節(jié)點(diǎn)1屬于dw1這個(gè)instance group。

2) 在節(jié)點(diǎn)2發(fā)出查詢

admin@dwrac2> select /*+ parallel(a,128) */ count(1) from testuser.big_table a;

3) 新開一個(gè)會(huì)話查詢并行進(jìn)程信息
SQL> select INST_ID,COUNT(1) from gv$px_session p where (p.inst_id,p.sid) in (select s.inst_id,s.sid from gv$session s where s.username='ADMIN' and module like 'SQL*%') GROUP BY INST_ID;

INST_ID COUNT(1)
---------- ----------
1 128
2 1

可以看到,除了并行查詢協(xié)調(diào)器(也就是發(fā)出查詢命令的會(huì)話)外,所有并行進(jìn)程都運(yùn)行在節(jié)點(diǎn)1上。
這也說(shuō)明了,即使發(fā)出并行查詢指令的節(jié)點(diǎn)不屬于parallel_instance_group,但它仍然可以調(diào)用屬于parallel_instance_group的節(jié)點(diǎn)資源。

admin@dwrac2> alter session set parallel_instance_group='dw134';

Session altered.

Elapsed: 00:00:00.00
admin@dwrac2> select /*+ parallel(a,128) */ count(1) from testuser.big_table a;


SQL> select INST_ID,COUNT(1) from gv$px_session p where (p.inst_id,p.sid) in (select s.inst_id,s.sid from gv$session s where s.username='ADMIN' and module like 'SQL*%') GROUP BY INST_ID;

INST_ID COUNT(1)
---------- ----------
1 42
2 1
4 42
3 44


總結(jié)一下:
1. RAC可以通過(guò)instance_groups和parallel_instance_group來(lái)靈活控制如何跨節(jié)點(diǎn)進(jìn)行并行運(yùn)算。
2. parallel_instance_group區(qū)分大小寫。如果設(shè)定的parallel_instance_groups值不屬于整個(gè)cluster的任意一個(gè)instance_groups設(shè)定值,則Oracle只會(huì)串行執(zhí)行操作,不會(huì)啟用并行。
3. 如果不設(shè)定parallel_instance_group,不管instance_group如何設(shè)置,并行可以跨越所有節(jié)點(diǎn)
4. 如果某個(gè)節(jié)點(diǎn)設(shè)定了有效的parallel_instance_group,則在該節(jié)點(diǎn)發(fā)出的并行操作可以運(yùn)行在parallel_instance_groups包含的所有節(jié)點(diǎn)上,不管parallel_instance_groups的節(jié)點(diǎn)是否包含發(fā)出命令的節(jié)點(diǎn)。
也就是說(shuō)并行會(huì)話運(yùn)行在那些節(jié)點(diǎn)只與instance_groups和parallel_instance_groups有關(guān),與命令在那個(gè)節(jié)點(diǎn)發(fā)出無(wú)關(guān)。
5. 一般建議設(shè)置好合適的instance_groups,但不要在系統(tǒng)級(jí)設(shè)定parallel_instance_groups,根據(jù)實(shí)際情況在會(huì)話級(jí)設(shè)置parallel_instance_groups參數(shù)。
6. 以下是一些例子及說(shuō)明

dwrac1.instance_groups='dw','dw1','dw123','dw124','dw134'
dwrac2.instance_groups='dw','dw2','dw123','dw124','dw234'
dwrac3.instance_groups='dw','dw3','dw123','dw134','dw234'
dwrac4.instance_groups='dw','dw4','dw124','dw134','dw234'

dwrac1.parallel_instance_groups='' --節(jié)點(diǎn)1發(fā)起的并行計(jì)算請(qǐng)求的會(huì)話可跨越所有節(jié)點(diǎn)執(zhí)行
dwrac1.parallel_instance_groups='dw' --節(jié)點(diǎn)1發(fā)起的并行計(jì)算請(qǐng)求的會(huì)話可跨越所有節(jié)點(diǎn)執(zhí)行
dwrac1.instance_groups='dw1' --節(jié)點(diǎn)1發(fā)起的并行計(jì)算請(qǐng)求的會(huì)話只可在節(jié)點(diǎn)1執(zhí)行
dwrac1.instance_groups='dw2' --節(jié)點(diǎn)1發(fā)起的并行計(jì)算請(qǐng)求的會(huì)話只可在節(jié)點(diǎn)2執(zhí)行
dwrac2.instance_groups='dw134' ----節(jié)點(diǎn)2發(fā)起的并行計(jì)算請(qǐng)求的會(huì)話只可在節(jié)點(diǎn)1/3/4上執(zhí)行
dwrac1.instance_groups='other' --不會(huì)啟用并行

轉(zhuǎn):http://www.cnblogs.com/ylqmf/archive/2012/03/16/2400126.html

 

 

11 g 中:

11g 數(shù)據(jù)庫(kù)中,并行會(huì)話默認(rèn)使用的是 shared pool 用于并行執(zhí)行時(shí)的消息緩沖區(qū),
并行過(guò)多時(shí)容易造成 shared pool 不足,使數(shù)據(jù)庫(kù)報(bào) ORA-4031 錯(cuò)誤。將這個(gè)參數(shù)設(shè)置為
true,使并行會(huì)話改為使用 large pool。

1、-- 調(diào)整 Px 操作使用 shared pool
alter system set "_px_use_large_pool"=true sid ='*' scope=spfile;

2、-- RAC 參數(shù)調(diào)整  parallel_force_local

該 11g 的新增參數(shù),用于將并行的 slave 進(jìn)程限制在發(fā)起并行 SQL 的會(huì)話所在的
節(jié)點(diǎn),即避免跨節(jié)點(diǎn)并行產(chǎn)生大量的節(jié)點(diǎn)間數(shù)據(jù)交換和引起性能問(wèn)題。該參數(shù)取代 11g
之前的 instance_groups 和 parallel_instance_group 兩個(gè)參數(shù)。

alter system set parallel_force_local=true sid='*' scope=spfile;

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI