返回顶部
首页 > 资讯 > 数据库 >oracle 之 控制oracle RAC 进行并行运算
  • 422
分享到

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

2024-04-02 19:04:59 422人浏览 泡泡鱼
摘要

 RAC的一大优点就是可以跨节点进行并行计算,那么如何控制并行运算?这就是这篇文章要讨论的内容。 10 g 中: 合理设置跨节点并行,需要先设置一些参数: ins

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

您可能感兴趣的文档:

--结束END--

本文标题: oracle 之 控制oracle RAC 进行并行运算

本文链接: https://lsjlt.com/news/45167.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • oracle 之 控制oracle RAC 进行并行运算
     RAC的一大优点就是可以跨节点进行并行计算,那么如何控制并行运算?这就是这篇文章要讨论的内容。 10 g 中: 合理设置跨节点并行,需要先设置一些参数: ins...
    99+
    2024-04-02
  • Oracle Study之--Oracle RAC重建控制文件
    Oracle Study之--Oracle RAC重建控制文件系统环境:操作系统: AIX5.3Cluster:  Oracle 10gR2 CRSOracle:   Oracle 10...
    99+
    2024-04-02
  • Oracle Study之--AIX install RAC运行root.sh(PRKR-1062)错误
    Oracle Study之--AIX install RAC运行root.sh(PRKR-1062)错误环境:操作系统: AIX 5300-09集群软件: CRS 10.2.0.1数据库:&nbs...
    99+
    2024-04-02
  • 如何使用golang函数并发控制进行并行计算
    在 go 中可以使用 goroutine 和函数并发控制实现并行计算,具体步骤如下:创建 goroutine,使用 go 关键字创建轻量级并发执行单元。使用 sync.waitgroup...
    99+
    2024-04-24
    并发控制 并行计算 golang
  • 怎么进行oracle控制文件的恢复
    这篇文章将为大家详细讲解有关怎么进行oracle控制文件的恢复,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1重建控制文件SYS@hyyk> alte...
    99+
    2024-04-02
  • Oracle怎么进行版本控制和变更管理
    Oracle数据库可以通过以下方式进行版本控制和变更管理: 使用版本控制工具:可以使用版本控制工具如Git、SVN等来管理数据库...
    99+
    2024-04-09
    Oracle
  • CentOS如何运行与控制后台进程
    本篇内容介绍了“CentOS如何运行与控制后台进程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们经常会碰到这样的问题,用ssh登录了远程...
    99+
    2023-06-10
  • c语言怎么输入运算符并用其进行运算
    在C语言中,可以使用标准输入函数`scanf`来输入运算符,并使用条件语句或循环结构进行运算。以下是一个示例代码,演示了如何输入运算...
    99+
    2023-09-04
    c语言
  • Oracle通过函数进行进制转化
    十六进制转化为十进制:to_number()SQL> select to_number('a','x') from dual; TO_NUMBER('...
    99+
    2024-04-02
  • 在 DBMS 中使用锁进行并发控制
    锁是 DBMS 中维护并发控制的一个组成部分。任何实现基于锁的并发控制的系统中的事务在获得所需的锁之前都无法读取或写入语句。基于锁的协议中有两种类型的锁。它们是:二进制锁 - 它们只能处于锁定或解锁两种状态之一。共享/独占锁 - 仅在执行读...
    99+
    2023-10-22
  • Oracle数据库中如何执行算术运算
    今天就跟大家聊聊有关Oracle数据库中如何执行算术运算,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Oracle在SQL语句中使用算术表达式来进行...
    99+
    2024-04-02
  • 如何进行Oracle 运维命令整理
    本篇文章为大家展示了如何进行Oracle 运维命令整理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、oracle建库与删库命令(1)oracle11g建库(一般习惯配置gdbname与sid名一...
    99+
    2023-06-28
  • Go语言的高并发场景中如何使用WaitGroup进行并行控制?
    在 go 语言中,使用 waitgroup 进行并行控制的步骤如下:初始化一个 waitgroup 实例。使用 add 方法添加要等待的 goroutine 数量。等待所有 gorout...
    99+
    2024-05-10
    go语言 同步机制
  • oracle中commit之后如何进行回滚
    commit之后 第一种: 记住大概的时间,获取前大概时间的数据。   select * from Test as of timestamp to_timestamp("2021-12-08 09:30:56","yyyy-m...
    99+
    2018-11-27
    oracle中commit之后如何进行回滚
  • ORACLE RAC运行在300G内存以上需要考虑的东西
    随着去IOE,其中PC服务器的硬件相对于IBM小机要便宜很多,很多主机都配置上T的内存,下面是MOS中介绍在RAC环境中,大于300G内存以上需要考虑的一些参数情况。 ...
    99+
    2024-04-02
  • 如何进行CentOS Oracle测试运行使用root用户修改
    这篇文章给大家介绍如何进行CentOS Oracle测试运行使用root用户修改,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Linux : CentOS-5Oracle: 10.2.0.1.0设置 Linux 上Or...
    99+
    2023-06-16
  • 怎么用VBS调用程序并对程序的运行情况进行监控
    这篇文章将为大家详细讲解有关怎么用VBS调用程序并对程序的运行情况进行监控,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。有同时要用一个CAE软件调用外部程序,但是,通过这个CAE软件调用外部程序以后,因为...
    99+
    2023-06-08
  • 如何在Linux系统上安装Git并进行版本控制?
    作为一款开源的分布式版本控制系统,Git在软件开发行业中被广泛使用。Git的使用可以大大提高代码的可维护性和可扩展性,而且它在多人协作开发中也非常方便。在本篇文章中,我们将介绍如何在Linux系统上安装Git,并学习如何使用Git进行版本控...
    99+
    2023-11-01
    linux git spring
  • oracle中commit之后该怎么进行数据回滚
    这篇文章将为大家详细讲解有关oracle中commit之后该怎么进行数据回滚,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。commit之后第一种:记住大概的时间,获取前大概时间的数据。sel...
    99+
    2023-06-22
  • oracle中commit之后进行数据回滚的方法
    commit之后 第一种: 记住大概的时间,获取前大概时间的数据。 select * from Test as of timestamp to_timestamp('2...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作