在RAC中,我们可以通过设置跨节点并行,将并行操作分布到RAC中的不同节点同时进行,以便发挥整个RAC环境的最大运算能力。在RAC中设置跨节点并行主要是通过设置parallel_instance_group和instance_groups这两个参数进行的。
instance_groups这个参数主要是设置该节点实例是否属于某一个实例组,这个实例组的命名可以根据你的需要随便命名,而没有严格的限制。每个节点可以设置多个不同的实例组名,实例组名用逗号隔开,比如:instance_groups=crm,erp,oltp。这样只要其他节点的instance_groups参数中有设置成一个一样的名字,就表示这个节点也属于这个实例组。比如在一个4节点RAC的环境中,A节点的instance_groups设置为(crm,erp,oltp),B节点设置为(crm,oltp),C节点设置为(crm,erp),D节点设置为(crm,erp,oltp),那么就有A、B、C、D这4个节点共同组成crm这个实例组,A、C、D这3个节点组成erp这个实例组,A、B、D这3个节点组成oltp这个实例组。
parallel_instance_group设置的值为instance_groups里面设置的值,表明这个节点上面进行的并行操作可以跨越哪些实例组。回到上面的例子,假如A节点的parallel_instance_group设置为crm,由于crm这个实例组的成员是A、B、C、D四个节点都有,那么A节点上的并行操作就可以跨越所有的4个节点。如果A节点的parallel_instance_group设置为erp,那么A节点并行操作就可以跨越A、C、D这3个节点。如果一个节点的parallel_instance_group设置的参数在instance_groups中没有设置,那么这个节点的并行操作将只会在本节点进行,假如B节点的parallel_instance_group设置为erp,那么它上面的并行操作将不会跨节点进行。
默认情况下这两个参数都为空,那么并行操作默认将会是跨节点并行的。当然并不是设置了这两个值就一定会发生跨节点并行,是由优化器和RAC的负载均衡机制共同决定一个并行操作是否跨节点并行,需要跨越实例组中的哪几个节点并行还是实例组的所有节点并行,每个节点分配多少个并行进程工作。由于跨节点并行还有内部互联通信的开销,因此并不一定就会比单节点并行会快多少,只有那些很大的并行操作可能才需要到跨节点并行。这个可以根据测试再进行变更。在我们运行的实际案例中,由于跨节点并行的机制比较复杂,有时候会触发一些BUG,甚至并行度为DEFAULT的表在进行跨节点并行DML时一个并行进程死掉导致整个节点宕机。推荐的做法是系统级别的parallel_instance_group这个参数不要设置,不同的程序在部署之前做好测试工作,看是否需要跨节点并行。由于parallel_instance_group是可以在会话级别设置的,可以修改一些需要跨节点并行的程序在执行之前先执行alter session set parallel_instance_group=……一下,然后只限制这些程序跨节点并行。
通过真正应用集群利用并行操作
作者:Kevin Conlon
如何在 RAC 环境中使用并行操作,以利用您的集群体系结构中的所有服务器硬件
<!--use same subhed/sub-subhed treatment as previously-->自从 7.1 版本第一次引入并行操作后,通过 Oracle Database 来使用该特性已为大家所熟悉。在传统的基于 UNIX 的对称多处理器 (SMP) 体系结构上并行执行 SQL 语句的能力大大提高了服务器的利用率,并加快了大型的资源密集型操作的执行速度。在真正应用集群 (RAC) 体系结构中,并行 SMP 部署等价于使用集群中所有可用的服务器。
在本文中,我将概述通过 RAC 来使用并行操作,以利用向外伸缩的集群体系结构。
并行目标和选项
并行的目标是利用数据库平台体系结构的所有可用的资源,以加快总体的处理速度。这些资源包括内存、处理器和 I/O。
可以在任意向上伸缩或单系统 SMP 映象环境中执行的并行操作也同样可以在向外伸缩的 RAC 集群环境中执行。这些操作包括:
-
查询(基于全表扫描)
- Create Tabel As 特性
-
索引构建
-
分区表上的 DML 操作(插入、更新、删除)
-
数据加载
可以使用标准 SQL 提示来执行上述列表中的操作 1 到 4,或通过在对象级的 INIT.ORA 参数设置并行度来执行,这个参数可以用来将并行操作限制在特定节点上。因而,对于更大的 RAC 体系结构(超过两台服务器),可以将特定的服务器分配给指定的组以限制或启用操作。
使用模式
对于通过 RAC 进行的并行执行,存在许多使用模式。它们是:
- 大数据集的并行查询的标准用法。在这种情况下,可以定义并行度来利用整个集群的所有可用资源。
- 使用受限的并行查询。这种情况将处理限制在集群中的特定节点上。因而可以对节点进行逻辑分组,以使用特定的操作类型。
-
并行索引构建/重建。在需要大规模索引构建的情况下,可以利用并行化来使集群节点资源的利用率最大化。与查询的情况类似,通过对服务器逻辑分组,可以限制这些操作。
INIT.ORA 参数
存在一些与参数控制相关的标准参数,这些参数配置服务器级的并行进程。RAC 环境的唯一变化是集群中的每一个服务器支持这些进程中的单独的一组。不过,可以在所有例程上全局设置这些参数也可以在特定的例程级上设置这些参数。
在表 1 列出了两个常见的并行参数。
参数名 |
类型 |
说明 |
parallel_max_servers |
整型 |
每个节点的最大并行进程数 |
parallel_min_servers |
整型 |
每个节点的最大服务器进程数 |
表 1:常见的并行 INIT.ORA 参数
表 2 中列出了一个 RAC 特有的参数。
参数名 |
类型 |
说明 |
instance_groups |
字符串 |
定义逻辑组,以实现对特定服务器的处理 |
表 2:RAC 特有的并行 INIT.ORA 参数
RAC 体系结构示例
对于本文中列出的示例,我们将利用一个运行在 Red Hat Advanced Server 2.1 下的一个两节点的 RAC 体系结构。图 1 包含了测试环境的一个示意图。
<!-- Generated by Simple Tags 1.2.4 - http://wordpress.org/extend/plugins/simple-tags -->
用于查看并行统计数据的 V$ 表
存在许多用于查看并行操作统计数据的表。最有用的两个表在表 3 中列出。以下的表名称以 GV$ 标识符为前缀。对于 RAC 实施,存在一组额外的全局视图,这些视图包含了一个额外的列,用于例程标识符。除了这一列之外,其余的列与相同名称的 V$ 结构相同。
视图名称 |
说明 |
GV$PQ_SYSSTAT |
全部 RAC 配置的所有与并行相关的统计数据 |
GV$PQ_SESSTAT |
按会话 ID 提供的会话特有的并行统计数据 |
表 3:与并行操作 V$ 相关的表
并行设置和基准
测试的基本 INIT.ORA 参数定义如下。注意 "*" 号定义参数为跨所有 RAC 例程的全局参数。
*.parallel_max_servers=5
*.parallel_min_servers=2
以下列表显示 SALES1 和 SALES2 例程都在数据库启动时启动了两个并行的后台进程。
UID PID PPID C STIME TTY TIME CMD
oracle 28216 1 0 11:07 ?00:00:00 ora_p000_SALES1
oracle 28218 1 0 11:07 ?00:00:00 ora_p001_SALES1
oracle 620 1 0 11:09 ?00:00:00 ora_p000_SALES2
oracle 622 1 0 11:09 ?00:00:00 ora_p001_SALES2
GV$PQ_SYSTAT 表的一个查询显示 Oracle 内核中的并行进程的基本状态。
select inst_id,statistic,value
from gv$pq_sysstat
where value > 0
order by 1, 2;
INST_ID STATISTIC VALUE
-------- -------------------------------- ---------
1 Servers Busy 1
Servers Idle 1
Servers Highwater 1
Server Sessions 1
2 Servers Busy 1
Servers Idle 1
Servers Highwater 1
Server Sessions 1
并行查询测试示例
在这一部分中,我们将查看本文之前提到的通过两个节点的 RAC 体系结构来使用并行查询的方法。需要执行两种类型的测试:
-
一种不受限制的测试,其中查询将在两个 RAC 节点上运行
-
一种受限制的测试,其中查询将限制在单个 RAC 节点上。
测试案例 1:不受限制的测试。在不受限制的测试中,通过并行提示,利用标准 SQL 来运行简单的查询。和任何查询一样,要利用并行操作,语句中必须包含全表扫描。
select /*+ full(c_stock) parallel(c_stock,6) */ sum(s_quantity) odcnt
from c_stock
/
根据并行提示(请求六个并行工作线程),在每个服务器节点上启动了三个进程。
UID PID PPID C STIME TTY TIME CMD
oracle 13878 1 0 14:17 ?00:00:03 ora_p000_SALES1
oracle 13880 1 0 14:17 ?00:00:03 ora_p001_SALES1
oracle 13940 1 1 14:23 ?00:00:02 ora_p002_SALES1
oracle 18601 1 0 14:20 ?00:00:01 ora_p000_SALES2
oracle 18603 1 0 14:20 ?00:00:01 ora_p001_SALES2
oracle 18652 1 3 14:28 ?00:00:01 ora_p002_SALES2
来自 GV$PQ_SYSTAT 的统计数据显示了在一个额外的服务器上启动的每一个例程。
INST_ID STATISTIC VALUE
---------- ------------------------------ ----------
1 DFO Trees 5
Distr Msgs Recv'd 49
Distr Msgs Sent 49
Local Msgs Recv'd 110
Local Msgs Sent 101
Queries Initiated 5
Server Sessions 9
Servers Busy 1
Servers Highwater 3
Servers Idle 1
Servers Shutdown 1
Servers Started 1
Sessions Active 1
2 Distr Msgs Recv'd 12
Distr Msgs Sent 6
Server Sessions 6
Servers Busy 1
Servers Highwater 3
Servers Idle 1
Servers Shutdown 1
Servers Started 1
测试案例 2:受限制的测试。为了将并行处理限制在特定的集群节点上,应用了例程组来创建逻辑服务器组。控制是通过 INIT.ORA 的参数 INSTANCE_GROUPS 进行的。INSTANCE_GROUPS 是一个与 RAC 相关的参数,并只在并行模式中指定。与运行期参数 PARALLEL_INSTANCE_GROUP 结合使用,它允许将并行查询操作限制在有限数量的例程上。
对于本部分中的测试,将利用下面指定的 INSTANCE_GROUPS。
# Init.ora Parameter Setting for Parallel Options
SALES1.INSTANCE_GROUPS='marketing'
SALES2.INSTANCE_GROUPS='finance'
在查询执行之前修改以下会话,以分配给 FINANCE 组。即使查询是在 SALES1 节点上启动,根据 INSTANCE_GROUP 设置,所有的处理将在 SALES2 上执行。
alter session set parallel_instance_group = 'finance';
select /*+ full(c_stock) parallel(c_stock,6) */ sum(s_quantity) odcnt
from c_stock
/
注意在进程列表中,所有请求的并行工作线程实际上都只在 SALES2 节点上运行,因为 SALES1 上的进程没有使用 CPU 时间。
UID PID PPID C STIME TTY TIME CMD
oracle 29994 1 0 14:13 ?00:00:00 ora_p000_SALES1
oracle 29996 1 0 14:13 ?00:00:00 ora_p001_SALES1
oracle 2631 1 0 14:51 ?00:00:01 ora_p000_SALES2
oracle 2633 1 0 14:51 ?00:00:01 ora_p001_SALES2
oracle 2676 1 4 14:57 ?00:00:01 ora_p002_SALES2
oracle 2678 1 3 14:57 ?00:00:01 ora_p003_SALES2
oracle 2680 1 4 14:57 ?00:00:01 ora_p004_SALES2
GV$PQ_SYSTAT 表的一个查询还显示在第二个 SALES2 例程上启动了额外的三个服务器。为什么只是三个服务器而不是四个?记住 INIT.ORA 参数 parallel_max_servers 的设置。该参数的值是 5,因而只往原来的 2 个服务器中增加了额外的 3 个服务器。
INST_ID STATISTIC VALUE
---------- ------------------------------ ----------
1 DFO Trees 3
Distr Msgs Recv'd 74
Distr Msgs Sent 74
Local Msgs Recv'd 2
Local Msgs Sent 1
Queries Initiated 3
Server Sessions 1
Servers Busy 1
Servers Highwater 1
Servers Idle 1
Sessions Active 2
2 Distr Msgs Recv'd 22
Distr Msgs Sent 11
Server Sessions 11
Servers Busy 6
Servers Highwater 6
Servers Started 3
在上面的例子中,利用 FINANCE 例程组,查询被限制在 SALES2 节点上。下面的 INIT.ORA 示例允许 FINANCE 例程组立即在 SALES1 和 SALES2 节点上运行。注意必须为各个组显式地输入 INIT.ORA 参数 INSTANCE_GROUPS。
# Init.ora Parameter Setting for Parallel Options
SALES1.instance_groups='marketing'
SALES1.instance_groups='finance'
SALES2.instance_groups='finance'
Create Table As 特性
为表对象创建拷贝时,Oracle 中的 Create Table As (CTAS) 特性极其有用。对于大型表,可以用和前面的并行查询示例中所用的相同方式并行地执行操作。下面的 SQL 语句是利用并行选项使用 CTAS 的一个例子。也可以使用例程组来将处理限制在特定的节点上。因此,根据 INSTANCE_GROUPS 参数,查询的运行将只在 SALES1 节点上执行。
alter session set parallel_instance_group = 'marketing';
create table c_district_backup parallel (degree 3)
as
select *
from c_district
/
索引构建
为大型表执行索引创建或重建是又一种资源密集型的操作,在其中使用并行操作可以大大提高性能。index create 语句要求操作的并行度为 6。与之前的例子类似,这个操作还可以利用 INSTANCE_GROUPS 参数来将操作限制在特定的节点上。
alter session set parallel_instance_group = 'marketing';
create unique index C_STOCK_I1 on C_STOCK (s_i_id, s_w_id)
tablespace stock_indx
parallel (degree 6)
/
要考虑的性能因素
并行操作的缺点是极度消耗服务器资源。最容易监控的服务器资源是 CPU 使用率。如果正常的 CPU 使用率相当高,那么不推荐部署大量的并行进程。超过 CPU 的总数也将导致性能下降。
数据布局是另一个需考虑的直接因素。如果目前存在 I/O 瓶颈,那么使用并行操作可能加剧这种状况。请确保并行目标对象的数据文件分布在适当数量的磁盘主轴上。
结论
在 RAC 环境中使用并行操作提供了利用属于集群体系结构的所有服务器硬件的灵活性。利用例程组,数据库管理员能够根据应用需求或服务水平协议进一步控制这些资源的分配。
http://www.oracle.com/technology/global/cn/pub/articles/conlon_rac.html
http://rdc.taobao.com/blog/dba/html/217_rac-span-paralle.html
http://book.csdn.net/bookfiles/877/10087727382.shtml

- 大小: 3.2 KB
分享到:
相关推荐
Oracle RAC(Real Application Clusters)与分布式数据库是两种不同的数据库解决方案,它们各自有其特点和适用场景。这里我们将深入探讨两者之间的差异。 1. 架构基础: - Oracle RAC:RAC是一种集群数据库解决...
在Oracle Grid分布式计算环境中,独立的硬件和软件组件被汇集起来,并根据需求动态分配资源,以满足不断变化的业务需求。 #### Oracle Grid 分布式计算的好处 Oracle Grid 分布式计算提供了多方面的优势,包括但不...
Oracle RAC通过DLM(分布式锁管理)机制来解决并发控制问题,确保数据的一致性和完整性。 ##### 2. 健忘症 (Amnesia) 健忘症是指集群中的某个节点因故障重启后,忘记了之前的状态信息。为了解决这个问题,RAC提供...
Oracle 11GR2 RAC (Real Application Clusters) 和 RAC-DG (Data Guard) 环境的部署是一项复杂而关键的任务,涉及到多个层面的技术集成和配置。以下是根据提供的信息,对整个部署过程的详细说明: 1. **Oracle RAC ...
Oracle RAC通过分布式锁定管理(DLM)机制来处理并发控制,确保在集群环境中各个节点对共享数据的访问有序进行,避免数据冲突。 并发控制是Oracle RAC的核心功能之一。DLM机制在多实例环境中起着关键作用,它确保当...
- **2007年**:实现了4节点的Oracle RAC环境,标志着淘宝开始正式采用分布式数据库架构。 - **2008年**:进一步扩展至12节点RAC环境,并计划在未来扩展至20节点。 #### 二、为何选择Oracle RAC ##### 可选方案评估...
- **Cache Fusion与GRD**:RAC通过Cache Fusion机制解决分布式计算问题,该机制包括GRD(全局资源目录)和一组RAC后台进程。GRD记录数据块在集群间的分布情况,而这些进程则负责管理和操作GRD中的数据。 - **GRD**...
集群的目标包括高可用性、负载均衡和分布式计算能力。 - **集群类型**:有两类集群,一类提供故障转移功能,另一类用于扩展工作负载。集群管理软件简化了多服务器的管理,使它们看起来像单个服务器。 2. **Oracle ...
Oracle RAC同城双活方案 Oracle RAC同城双活方案是指在同一个城市内建立两个数据中心,并通过高速网络连接它们,以实现高可用性和灾难恢复的数据库系统。这种架构可以提供高可用性和灾难恢复能力,保护数据库系统免...
在架构图(Architecture Diagram)中,我们可以看到Nutanix平台如何在物理硬件之上,通过虚拟化技术整合计算、存储和网络资源,以及Oracle RAC如何在这个环境中部署。具体来说,Oracle RAC节点可能会部署在Nutanix...
在RAC环境中,时间同步的重要性不言而喻,因为任何时间上的差异都可能导致数据库的“脑裂”问题,即在分布式系统中出现数据一致性错误。 时间同步的关键在于确保所有节点间的时间一致性,以防止由于时间不同步导致...
在Oracle RAC中,多个数据库实例同时运行在同一数据库上,共享同一物理存储,实现了真正的集群计算环境。 1-2至1-5的内容展示了Oracle RAC的基本架构。在Oracle RAC中,每个实例都有自己的内存结构,包括SGA...
在分布式环境中,GPFS可以实现数据的快速复制和同步,适合大数据分析、媒体流和科研计算等领域。 **Oracle 11g RAC (Real Application Clusters)** Oracle RAC是一种数据库高可用性解决方案,允许多个数据库实例...
1. **Clusterware**:Oracle Clusterware是RAC的基础,它是一个分布式系统管理软件,负责监控和管理集群中的所有资源,包括数据库实例、网络和服务等,确保在节点故障时能自动恢复。 2. **Global Cache服务**:RAC...
《Linux7.0 Oracle 12c RAC R2 最佳环境部署手册》是一份详尽的指南,专为在Linux 7.0操作系统上安装和配置Oracle 12c Real Application Clusters (RAC) Release 2而设计。这份手册涵盖了从系统规划、硬件配置到软件...
集群的目标可以是提供高可用性,当主服务器出现问题时,工作负载可以自动转移到其他节点,也可以是提供分布式计算能力以扩展处理能力。集群管理软件负责协调各个节点之间的通信和资源管理,确保在集群中的操作如同在...
- **Oracle RAC**:Oracle Real Application Clusters (RAC) 环境下,需要特别关注分布式事务的管理和性能问题。 #### 五、Oracle 账户权限与 XA - **账户权限**:在使用 XA 和 Oracle 控制的分布式事务时,需要...
总之,Oracle RAC通过DLM、健忘症处理、脑裂解决策略以及IO隔离等机制,实现了在集群环境下的高可用性和数据一致性。Clusterware作为关键组件,协调不同节点间的操作,确保整个RAC系统的稳定运行。
Oracle10g RAC是一种基于网格计算的企业级数据库集群解决方案,能够有效解决上述问题。它通过以下几种方式提高数据库系统的整体性能: 1. **多节点共享数据库**:多个数据库节点可以同时访问同一份数据,提高了数据...