中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

oracle 之 控制oracle RAC 進行并行運算

發布時間:2020-08-04 18:47:07 來源:ITPUB博客 閱讀:147 作者:張沖andy 欄目:關系型數據庫

 RAC的一大優點就是可以跨節點進行并行計算,那么如何控制并行運算?這就是這篇文章要討論的內容。

10 g 中:

合理設置跨節點并行,需要先設置一些參數:
instance_groups:這個參數主要是設置該節點實例是否屬于某一個實例組。每個節點可以設置多個不同的實例組名,實例組名用逗號隔開。
parallel_instance_group設置的值為instance_groups里面設置的值,表明這個節點上面進行的并行操作可以跨越哪些實例組。

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';

以上參數分別為4個節點定義了5個instance group,有的group包含多個節點,有的group只包含一個節點。

一、跨所有節點執行

分兩種情況進行測試:instance_groups包含所有節點和instance_groups只包含一個節點。

1. instance_groups包含所有節點

1). 節點2參數設置情況
admin@dwrac2> show parameter instance_group

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

只定義了instance_groups,不設置parallel_instance_group。
前面我們設置過,dw這個instance_group包含了所有的節點。

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

3). 另開一個窗口查詢并行進程情況
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

可以看到,并行會話(parallel slaves)平均分配到4個節點上。節點2多一個進程是因為它是并行查詢的發起者,額外的會話是發起會話,也就是并行查詢協調器(parallel query coordinator),其余的是并行從屬進程。
之所有能分配到4個節點上,是因為4個節點都屬于dw這個instance group,且都沒有設定parallel_instance_group。

2. instance_groups只包含一個節點

1). 修改參數
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

不設置parallel_instance_group,且instance_group=dw2只包含節點2.

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

3). 另開一個窗口查詢并行進程情況

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'只在節點2出現,但是如果不設置parallel_instance_group,并行仍然可以跨越所有節點。

二、跨部分節點執行

這部分分兩種測試:發出命令的節點屬于parallel_instance_group的一員以及發出命令的節點不屬于parallel_instance_group
1. 發出命令的節點屬于parallel_instance_group的一員
1). 在節點2修改參數

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.

--這個設置的會強制并行操作只會屬于dw2這個instance group的節點中執行。
--注意:parallel_instance_group是大小寫區分的,如果用alter session set parallel_instance_group=dw2,則不會起任何并行進程,因為不加單引號的話,實際上載后臺dw2會被轉換成大寫的DW2,不屬于任何一個instance group。


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

3). 另起一個會話查詢并行情況

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

可以看到,因為只有節點2屬于dw2這個instance group,所有并行會話都分布在節點2上。


2. 發出命令的節點不屬于parallel_instance_group

1) 在節點2修改參數
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.

根據我們之前的設置,只有節點1屬于dw1這個instance group。

2) 在節點2發出查詢

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

3) 新開一個會話查詢并行進程信息
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

可以看到,除了并行查詢協調器(也就是發出查詢命令的會話)外,所有并行進程都運行在節點1上。
這也說明了,即使發出并行查詢指令的節點不屬于parallel_instance_group,但它仍然可以調用屬于parallel_instance_group的節點資源。

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


總結一下:
1. RAC可以通過instance_groups和parallel_instance_group來靈活控制如何跨節點進行并行運算。
2. parallel_instance_group區分大小寫。如果設定的parallel_instance_groups值不屬于整個cluster的任意一個instance_groups設定值,則Oracle只會串行執行操作,不會啟用并行。
3. 如果不設定parallel_instance_group,不管instance_group如何設置,并行可以跨越所有節點
4. 如果某個節點設定了有效的parallel_instance_group,則在該節點發出的并行操作可以運行在parallel_instance_groups包含的所有節點上,不管parallel_instance_groups的節點是否包含發出命令的節點。
也就是說并行會話運行在那些節點只與instance_groups和parallel_instance_groups有關,與命令在那個節點發出無關。
5. 一般建議設置好合適的instance_groups,但不要在系統級設定parallel_instance_groups,根據實際情況在會話級設置parallel_instance_groups參數。
6. 以下是一些例子及說明

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='' --節點1發起的并行計算請求的會話可跨越所有節點執行
dwrac1.parallel_instance_groups='dw' --節點1發起的并行計算請求的會話可跨越所有節點執行
dwrac1.instance_groups='dw1' --節點1發起的并行計算請求的會話只可在節點1執行
dwrac1.instance_groups='dw2' --節點1發起的并行計算請求的會話只可在節點2執行
dwrac2.instance_groups='dw134' ----節點2發起的并行計算請求的會話只可在節點1/3/4上執行
dwrac1.instance_groups='other' --不會啟用并行

轉:http://www.cnblogs.com/ylqmf/archive/2012/03/16/2400126.html

 

 

11 g 中:

11g 數據庫中,并行會話默認使用的是 shared pool 用于并行執行時的消息緩沖區,
并行過多時容易造成 shared pool 不足,使數據庫報 ORA-4031 錯誤。將這個參數設置為
true,使并行會話改為使用 large pool。

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

2、-- RAC 參數調整  parallel_force_local

該 11g 的新增參數,用于將并行的 slave 進程限制在發起并行 SQL 的會話所在的
節點,即避免跨節點并行產生大量的節點間數據交換和引起性能問題。該參數取代 11g
之前的 instance_groups 和 parallel_instance_group 兩個參數。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

霍山县| 芦溪县| 临高县| 哈巴河县| 怀仁县| 贡觉县| 武安市| 尚志市| 鱼台县| 淮北市| 淮南市| 建昌县| 玉树县| 余姚市| 新兴县| 江阴市| 德江县| 崇明县| 南澳县| 吴忠市| 乌拉特后旗| 巫山县| 平谷区| 呼伦贝尔市| 米林县| 板桥市| 高陵县| 徐水县| 涿鹿县| 五大连池市| 民权县| 盐城市| 平度市| 嘉义县| 乐业县| 阳江市| 托克托县| 赞皇县| 陆丰市| 黄山市| 兰坪|