rac 控制并行进程的执

来源:互联网 发布:企业信息采集软件 编辑:程序博客网 时间:2024/06/03 17:43


1、此参数用于在rac环境下限制并行只在运行节点并行操作

PARALLEL_FORCE_LOCAL

PropertyDescriptionParameter typeBooleanDefault valuefalseModifiableALTER SESSIONALTER SYSTEMRange of valuestrue | falseBasicNo

PARALLEL_FORCE_LOCAL controls parallel execution in an Oracle RAC environment. By default, the parallel server processes selected to execute a SQL statement can operate on any or all Oracle RAC nodes in the cluster. By setting PARALLEL_FORCE_LOCAL to true, the parallel server processes are restricted so that they can only operate on the same Oracle RAC node where the query coordinator resides (the node on which the SQL statement was executed on).


在rac环境中,如果使用parallel创建目标对象,那么并行创建一般会在主节点运行。

但是使用命令:

alter session set PARALLEL_FORCE_LOCAL=true

在并行创建目标对象,只会在执行命令的节点上并行创建目标对象

在节点二上执行并行:
             select /*+full(t1) full(t2) parallel(t1,4)*/* from scott.t1,scott.t1 t2 where t1.empno=t2.empno;
               select INST_ID,COUNT(1) from gv$px_session p where (p.inst_id,p.sid) in (select s.inst_id,s.sid   From Gv$session S where username='SCOTT'  and MODULE='SQL*Plus' and status='ACTIVE'
 ) GROUP BY INST_ID; 
                                   INST_ID   COUNT(1)
---------- ----------
2    5


2、parallel_instance_group和instance_groups控制并行进程在rac实例跨节点执行

SQL> show parameter instance_groupNAME     TYPE VALUE------------------------------------ ----------- ------------------------------instance_groups      stringparallel_instance_group      string设置并行组:node1:SQL> alter system set  instance_groups='p','p1' scope=spfile sid='test1';node2:SQL> alter system set  instance_groups='p','p2' scope=spfile sid='test2';重启rac:SQL> show parameter instance_groupNAME     TYPE VALUE------------------------------------ ----------- ------------------------------instance_groups      string p, p2parallel_instance_group      stringSQL> show parameter instance_groupNAME     TYPE VALUE------------------------------------ ----------- ------------------------------instance_groups      string p, p1parallel_instance_group      string如果在没有设置parallel_isntance_group的情况下,rac会根据负载情况在两个节点分配并行进程数目:在node2 ,scott上执行并行: select /*+full(t1) full(t2) parallel(t1,4)*/* from scott.t1,scott.t1 t2 where t1.empno=t2.empno;然后查看:select INST_ID,COUNT(1) from gv$px_session p where (p.inst_id,p.sid) in (select s.inst_id,s.sid   From Gv$session S where username='SCOTT'  and MODULE='SQL*Plus' and status='ACTIVE'  ) GROUP BY INST_ID;   INST_ID   COUNT(1)---------- ---------- 1    4 2    5设置了parallel_instance_group 后,那么并行进程只会在含有parallel_instance_group 指定的组上的实例上分配并行进程设置SQL> alter session set parallel_instance_group='p2';SQL> show parameter instance_groupNAME     TYPE VALUE------------------------------------ ----------- ------------------------------instance_groups      string p, p2parallel_instance_group      string p2当node2 设置了parallel_instance_group='p2'后,那么并行进程只会在instance_groups中有p2组的实例上开启并行进程,含有p2的instance_group只有在node2上有,那么并行进程会在node2上有5个进程,一个并行协调进程,4个并行进程在node2 ,scott用户下执行下列并行: select /*+full(t1) full(t2) parallel(t1,4)*/* from scott.t1,scott.t1 t2 where t1.empno=t2.empno;select INST_ID,COUNT(1) from gv$px_session p where (p.inst_id,p.sid) in (select s.inst_id,s.sid   From Gv$session S where username='SCOTT'  and MODULE='SQL*Plus' and status='ACTIVE'  ) GROUP BY INST_ID;  INST_ID   COUNT(1)---------- ---------- 2    7设置alter session set  parallel_instance_group='p1'SQL> show parameter instance_groupNAME     TYPE VALUE------------------------------------ ----------- ------------------------------instance_groups      string p, p2parallel_instance_group      string p1当node2 设置了parallel_instance_group='p1'后,那么并行进程只会在instance_groups中有p1组的实例上开启并行进程,含有p1的instance_group只有在node1上有,那么并行进程会在node1上有4个并行进程,node2上有一个并行协调进程.在node2 ,scott用户下执行下列并行: select /*+full(t1) full(t2) parallel(t1,4)*/* from scott.t1,scott.t1 t2 where t1.empno=t2.empno;select INST_ID,COUNT(1) from gv$px_session p where (p.inst_id,p.sid) in (select s.inst_id,s.sid   From Gv$session S where username='SCOTT'  and MODULE='SQL*Plus' and status='ACTIVE'  ) GROUP BY INST_ID;   INST_ID   COUNT(1)---------- ---------- 1    8 2    1出现这样的结果,节点一是8,那是因为有并行子进程存在总结1、RAC可以通过instance_groups和parallel_instance_group来灵活控制如何跨节点进行并行运算。2、parallel_instance_group区分大小写。如果设定的parallel_instance_groups值不属于整个cluster的任意一个instance_groups设定值,则Oracle只会串行执行操作,不会启用并行。3、如果不设定parallel_instance_group,不管instance_group如何设置,并行可以跨越所有节点。4、如果某个节点设定了有效的parallel_instance_group,则在该节点发出的并行操作可以运行在parallel_instance_groups包含的所有节点上,不管parallel_instance_groups的节点是否包含发出命令的节点。也就是说并行会话运行在那些节点只与instance_groups和parallel_instance_groups有关,与命令在那个节点发出无关。5、一般建议设置好合适的instance_groups,但不要在系统级设定parallel_instance_groups,根据实际情况在会话级设置parallel_instance_groups参数。6、以下是一些例子及说明dwrac1.instance_groups='dw','dw1','dw123','dw124','dw134'dwrac2.instance_groups='dw','dw2','dw123','dw124','dw234'dwrac3.instance_groups='dw','dw3','dw123','dw134','dw234'dwrac4.instance_groups='dw','dw4','dw124','dw134','dw234'dwrac1.parallel_instance_groups='' --节点1发起的并行计算请求的会话可跨越所有节点执行dwrac1.parallel_instance_groups='dw' --节点1发起的并行计算请求的会话可跨越所有节点执行dwrac1.instance_groups='dw1' --节点1发起的并行计算请求的会话只可在节点1执行dwrac1.instance_groups='dw2' --节点1发起的并行计算请求的会话只可在节点2执行dwrac2.instance_groups='dw134' ----节点2发起的并行计算请求的会话只可在节点1/3/4上执行dwrac1.instance_groups='other' --不会启用并行



原创粉丝点击