11.2 RAC 架构之业务分割(4)
要限制并行服务的运行范围,可以通过设置2 个初始化参数来达到这个目的,这两个参数就是:instance-group
parallel_instance_group
这实际上是将并行和特定的实例捆绑在一起的一种方法。
将instance-group 和parallel_instance_group 设置成相同的值,就实现了并行和实例的捆绑。
看下面的例子:SQL>col name for a40;
SQL>col value for a40;
SQL>set linesize 140;
SQL>select inst_id,name,value,ISDEFAULT from gv$parameter
where name in ('instance_groups','
parallel_instance_group') order by 1,2;
INST_ID NAME VALUE ISDEFAULT
---------- ----------------- ---------------------- --------
1 instance_groups TRUE
1 parallel_instance_group TRUE
2 instance_groups TRUE
2 parallel_instance_group TRUE
3 instance_groups TRUE
3 parallel_instance_group TRUE
4 instance_groups TRUE
4 parallel_instance_group TRUE
在默认状态下,这两个参数的值都为空,意思是并行将在所有的实例上被执行(实际上并非在任何时候都必须分布到各个实例上,这要视查询的并行度和实例的负载情况而定)。
我们来看,在默认情况下,并行是如何在各个实例上执行的?SQL>create table t1 parallel 10 as select * from dba_objects;
表已创建。
SQL>select degree from user_tables wheretable_name='T1';
DEGREE
--------------------
10
创建一个表T1,并行度为10。SQL>select distinct sid from v$mystat;
SID
----------
1608
获得当前会话的SID。SQL>set autotrace trace exp;
SQL>set linesize 140;
SQL>select count(*) from t1;
执行计划
----------------------------------------------------------
Plan hash value: 3110199320
----------------------------------------------
----------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)|
Time | TQ |IN-OUT|PQ Distrib|
-----------------------------------------------
---------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 38 (3)| 00:00:01 | | |
| 1 | SORT AGGREGATE | | 1 | | | |
| 2 | PX COORDINATOR | | | | | |
| 3 | PX SEND QC (RANDOM) | :TQ10000 | 1 | | |
Q1,00 | P->S | QC (RAND)|
| 4 | SORT AGGREGATE | | 1 | | | Q1,00 | PCWP
| 5 | PX BLOCK ITERATOR | | 146K| 38 (3)|
00:00:01 | Q1,00 | PCWC |
| 6 | TABLE ACCESS FULL| T1 | 146K| 38 (3)|
00:00:01 | Q1,00 | PCWP |
-------------------------------------------
-------------------------------------------------
Note
-----
- dynamic sampling used for this statement
从执行计划中可以看到,查询使用了并行技术。SQL>select inst_id,sid,qcsid,qcinst_id,degree
from gv$px_session whereqcsid=1608order by
sid;
QCSID QCINST_ID SID INST_ID DEGREE
---------- ---------- ------------- -------- ---------
1608 1 1595 2 10
1608 1 1596 3 10
1608 1 1606 4 10
1608 1608 1
1608 1 1616 2 10
1608 1 1618 2 10
1608 1 1666 3 10
1608 1 1669 4 10
1608 1680 1 10
1608 1 1688 2 10
1608 1 1691 4 10
通过查看视图gv$px_session 可以看到,此时Oracle 将并行分布在4 个实例上执行,当然,每个实例上启动的并行服务进程是可以不同的。
【责任编辑:云霞 TEL:(010)68476606】
点赞 0