在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=……一下,然后只限制这些程序跨节点并行。
source:http://www.taobaodba.com/html/217_rac-span-paralle.html
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27036311/viewspace-740985/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/27036311/viewspace-740985/