ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle RAC环境分布式计算(prallel能力)设置 --转载

oracle RAC环境分布式计算(prallel能力)设置 --转载

Linux操作系统 作者:yilan900607 时间:2014-02-14 15:48:29 0 删除 编辑

在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=……一下,然后只限制这些程序跨节点并行。

 

PARALLEL_INSTANCE_GROUP是并行查询使用的组的名字,如果这个参数是空的,那么说明PQ可以使用数据库的所有实例。如果指定了某个名字,那么说明PQ只能在指定的INSTANCE GROUP里进行。

PARALLEL_INSTANCE_GROUP参数是可以在会话级动态修改的,因此通过调整这个参数,可以控制并行查询的范围。这个特性对于双节点RAC和多节点RAC都十分有用。

要注意的是在不同的ORACLE版本中,这2个参数的设置是不同的,因此要了解详细的信息,请参考相关手册。比如在很多版本中,如果设置了一个不存在的GOUP,那么该SQL会使用串行方式执行,而不使用PQ,在有些版本中,错误的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 体系结构来使用并行查询的方法。需要执行两种类型的测试:

 

  1. 一种不受限制的测试,其中查询将在两个 RAC 节点上运行
  2. 一种受限制的测试,其中查询将限制在单个 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 环境中使用并行操作提供了利用属于集群体系结构的所有服务器硬件的灵活性。利用例程组,数据库管理员能够根据应用需求或服务水平协议进一步控制这些资源的分配。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29455589/viewspace-1081503/,如需转载,请注明出处,否则将追究法律责任。

下一篇: LOB存储笔记
请登录后发表评论 登录
全部评论

注册时间:2014-01-22

  • 博文量
    11
  • 访问量
    32651