阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle 之 控制Oracle RAC 进行并行运算

417次阅读
没有评论

共计 5969 个字符,预计需要花费 15 分钟才能阅读完成。

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’ – 不会启用并行

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;

更多 Oracle 相关信息见Oracle 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=12

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计5969字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19352
评论数
4
阅读量
8025484
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用 AI 做了一个 1978 年至 2019 年中国大陆企业注册的查询网站 最近星哥在 GitHub 上偶然...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...