Oracle RAC 跨节点并行运算
RAC的一大优点就是可以跨节点进行并行计算,那么如何控制并行运算?
合理设置跨节点并行,需要先设置一些参数:
instance_groups:这个参数主要是设置该节点实例是否属于某一个实例组。每个节点可以设置多个不同的实例组名,实例组名用逗号隔开。
parallel_instance_group设置的值为instance_groups里面设置的值,表明这个节点上面进行的并行操作可以跨越哪些实例组。
案例: 验证rac 并行计算
1、配置实例并行计算
SQL> alter system set instance_groups ='dw','dw1','dw123' scope=spfile sid='prod1';
System altered.
SQL> alter system set instance_groups ='dw','dw2','dw123' scope=spfile sid='prod2';
System altered.
SQL> alter system set instance_groups ='dw','dw2','dw234' scope=spfile sid='prod3';
System altered.
instance_groups :设置instance 组,如上所示:dw 组包含所有实例,dw1,dw2,dw3 只包含单个实例,dw123 包含两个实例,dw234 包含一个实例
parallel_instance_group: 如果不设置,默认在任何实例上的并行操作都会分布到所有实例上,设置parallel_instance_group后,指定只在那个实例组指定的实例上做并行操作
如:parallel_instance_group = dw ,则所有的实例都会做并行(dw 包含所有实例)
parallel_instance_group = dw1 ,则并行操作只在实例1上进行
设置如下:
在实例 1上:
1、配置参数
SQL> show parameter instance_group
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_groups string dw,dw1,dw123
parallel_instance_group string ;参数为空,则会在所有实例上运行并行操作
2、scott 用户做并行操作
SQL> conn scott/tiger
Connected.
SQL> alter session enable parallel dml;
Session altered.
SQL> alter table emp1 parallel;
SQL> insert /*+ parallel(emp1 4) */ into emp1 select * from emp;
14 rows created.
SQL> rollback;
Rollback complete.
SQL> insert /*+ parallel(emp1 4) */ into emp1 select * from emp;
14 rows created.
3、查看并行结果
SQL> select inst_id ,sid from gv$session where username='SCOTT';
INST_ID SID
---------- ----------
1 126
1 134
1 152
3 124
3 125
3 141
3 145
2 126
2 147
9 rows selected.
配置如下:
SQL> alter system set parallel_instance_group ='dw123';
System altered.
SQL> show parameter instance_group
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_groups string dw,dw1, dw123
parallel_instance_group string dw123
SQL>
SQL> select inst_id ,sid from gv$session where username='SCOTT';
INST_ID SID
---------- ----------
1 116
1 120
1 121
1 122
1 129
2 122
2 123
2 134
2 135
9 rows selected.
parallel_instance_group= dw123, dw123 组包含实例1和2 ,所以并行操作选择实例1和2 。