我们的生产库一般在节点一上的压力比较大,在节点二上的压力比较小,对内存、cpu等的观察也是在节点二使用率比较低,所以在节点二上建索引并且开了并行,可是发现开了并行后,建索引都在节点一上运行。通过在网上查找资料,发现可以用过参数限制只节点上运行开并行的语句。
instance_groups,静态参数,指定实例所属的组,组名用逗号隔开
parallel_instance_group,动态参数,可在会话级别进行修改,指定并行所使用的组。为空和为ALL时,说明并行可以开在数据库的所有实例上。
RAC1.instance_groups='RAC','RAC1'
RAC2.instance_groups='RAC','RAC2'
RAC1.parallel_instance_group='RAC1' # 在节点一上运行的语句开并行后再节点一上运行
RAC2.parallel_instance_group='RAC2' # 在节点二上运行的语句开并行后再节点二上运行
alter session set parallel_instance_group='RAC'; 可以在任何一个节点上执行并行
当设置parallel_instance_group为instance_groups中不存在的group时,并发就无法开启或者直接报错
SQL> select instance_name,instance_number from gv$instance;
INSTANCE_NAME INSTANCE_NUMBER
---------------- ---------------
rac1 1
rac2 2
SQL> show parameter instance_group
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_groups string
parallel_instance_group string
SQL> alter session set parallel_instance_group='rac';
Session altered.
SQL> show parameter instance_group
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_groups string
parallel_instance_group string rac
SQL>