所以对于非下层的并行进程造成的等待,解决的方法就是降低每个并行执行的并行度,比如对象(表,索引)上预设的并行度或者查询Hint 指定的并行度。
五. 并行执行的使用范围
Oracle的并行技术在下面的场景中可以使用:
(1) Parallel Query(并行查询)
(2) Parallel DDL(并行DDL操作,如建表,建索引等)
(3) Parallel DML(并行DML操作,如insert,update,delete等)
5.1 并行查询
并行查询可以在查询语句,子查询语句中使用,但是不可以使用在一个远程引用的对象上(如DBLINK)。
一个查询能够并行执行,需要满足一下条件:
(1) SQL语句中有Hint提示,比如Parallel 或者 Parallel_index.
(2) SQL语句中引用的对象被设置了并行属性。
(3) 多表关联中,至少有一个表执行全表扫描(Full table scan)或者跨分区的Index range SCAN。
如: select /*+parallel(t 4) * from t;
5.2 并行DDL 操作
5.2.1 表操作的并行执行
以下表操作可以使用并行执行:
CREATE TABLE … AS SELECT
ALTER TABLE … move partition
Alter table … split partition
Alter table … coalesce partition
DDL操作,我们可以通过trace 文件来查看它的执行过程。
示例:
查看当前的trace 文件:
/* Formatted on 2010/8/31 23:33:00 (QP5 v5.115.810.9015) */
SELECT u_dump.VALUE
|| '/'
|| db_name.VALUE
|| '_ora_'
|| v$process.spid
|| NVL2 (v$process.traceid, '_' || v$process.traceid, NULL)
|| '.trc'
"Trace File"
FROM v$parameter u_dump
CROSS JOIN
v$parameter db_name
CROSS JOIN
v$process
JOIN
v$session
ON v$process.addr = v$session.paddr
WHERE u_dump.name = 'user_dump_dest'
AND db_name.name = 'db_name'
AND v$session.audsid = SYS_CONTEXT ('userenv', 'sessionid');
Trace File
------------------------------------------------------------------------------
d:/app/administrator/diag/rdbms/orcl/orcl/trace/orcl_ora_5836.trc
d:/app/administrator/diag/rdbms/orcl/orcl/trace/orcl_ora_3048.trc
SQL> alter session set events '10046 trace name context forever,level 12';
会话已更改。
SQL> create table 怀宁 parallel 4 as select * from dba_objects;
表已创建。
SQL> alter session set events '10046 trace name context off' ;
会话已更改。
这里用到了ORACLE的event 时间。 10046事件是用来跟踪SQL语句的。开启事件后,相关的信息会写道trace 文件中,这也是之前我们查看trace 文件名的原因。 关于event事件,参考我的blog:
Oracle 跟踪事件 set event:http://www.2cto.com/database/201110/107270.html
有了trace文件, 我们可以用tkprof 工具,来查看trace 文件的内容。 关于tkprof 工具介绍,参考blog:
使用 Tkprof 分析 ORACLE 跟踪文件:http://www.2cto.com/database/201110/107269.html
进入trace 目录,用tkprof命令生成txt 文件,然后查看txt 文件。
d:/app/Administrator/diag/rdbms/orcl/orcl/trace>tkprof orcl_ora_3048.trc 安庆.txt sys=no
TKPROF: Release 11.2.0.1.0 - Development on 星期二 8月 31 23:45:25 2010
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
d:/app/Administrator/diag/rdbms/orcl/orcl/trace>
5.2.2 创建索引的并行执行
创建索引时使用并行方式在系统资源充足的时候会使性能得到很大的提高,特别是在OLAP系统上对一些很大的表创建索引时更是如此。 以下的创建和更改索引的操作都可以使用并行:
Create index
Alter index … rebuild
Alter index … rebuild partition
Alter index … split partition
一个简单的语法:create index t_ind on t(id) parallel 4;
监控这个过程和5.2.1 中