Oracle Parallel Execution(并行执行) (三)

2014-11-24 12:55:25 · 作者: · 浏览: 7
层的并行服务进程空闲造成的。该等待事件的超时时间是2秒,如果平均等待时间也差不多是2秒,就说明是下层的并行进程“无事所做”,处于空闲状态。 如果和2秒的差距很大,就说明不是下层并行服务超时导致的空闲等待,而是并行服务之间的竞争导致的,因为这个平均等待事件非常短,说明并行服务进程在很短时间的等待之后就可以获取资源来处理数据。

所以对于非下层的并行进程造成的等待,解决的方法就是降低每个并行执行的并行度,比如对象(表,索引)上预设的并行度或者查询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 中