使用并行查询模拟direct path read等待事件

 上次做了一个磁盘排序引起的direct path read等待事件,这次做个并行查询引起的等待事件

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
PL/SQL Release 10.2.0.3.0 - Production

SQL> show parameter sga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     FALSE
sga_max_size                         big integer 256M
sga_target                           big integer 256M
SQL> show parameter pga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target                 big integer 200M

session 1:
SQL> create table parallel_test as select a.* from dict a,dict b order by 1 ;

表已创建。

已用时间:  00: 02: 00.14
SQL> select table_name,degree from user_tables where table_name='PARALLEL_TEST';

TABLE_NAME                     DEGREE
------------------------------ --------------------
PARALLEL_TEST                           1
SQL> alter table parallel_test parallel 4;

表已更改。
SQL> alter table parallel_test parallel;
表已更改。
session 2:
SQL> select sid,program,event,p1,p2,p3 from v$session where username is not null ;

       SID PROGRAM              EVENT                                                                 P1            P2         P3
---------- -------------------- ---------------------------------------------------------------- ---------- ---------- ----------
       154 sqlplus.exe          SQL*Net message from client                                      1111838976          1          0
       158 sqlplus.exe          SQL*Net message from client                                      1111838976          1          0
session 1:
SQL> select count(*) from parallel_test;

  COUNT(*)
----------
   3508129

已用时间:  00: 00: 12.66
session 2:
SQL> /

       SID PROGRAM              EVENT                                                                 P1            P2         P3
---------- -------------------- ---------------------------------------------------------------- ---------- ---------- ----------
       140 ORACLE.EXE (P001)    direct path read                                                       5          6192         16
       141 ORACLE.EXE (P000)    direct path read                                                       5          5072         16
       142 ORACLE.EXE (P002)    direct path read                                                       5          6704         16
       145 ORACLE.EXE (P003)    direct path read                                                       5          5632          9
       154 sqlplus.exe          PX Deq: Execute Reply                                                200             1          0
       158 sqlplus.exe          SQL*Net message to client                                        1111838976          1          0

已选择6行。

session 1:
SQL> alter table parallel_test noparallel;

表已更改。
SQL> select count(*) from parallel_test;

  COUNT(*)
----------
   3508129

已用时间:  00: 00: 08.26
session 2:

SQL> /

      SID PROGRAM              EVENT                                                                 P1            P2         P3
--------- -------------------- ---------------------------------------------------------------- ---------- ---------- ----------
      154 sqlplus.exe          db file scattered read                                                 5         26495         16
      158 sqlplus.exe          SQL*Net message from client                                      1111838976          1          0
session 1:
SQL> alter table parallel_test parallel;

表已更改。
SQL> select count(*) from parallel_test;

  COUNT(*)
----------
   3508129

已用时间:  00: 00: 12.94

这里可以对比出使用了并行查询速度反而还不如不使用并行查询,并非使用并行查询功能就会提高程序运行效率,相反,不正确的使用并行查询反而会降低查询效率,关于何时使用并行查询,请查考TOM的9i/10g编程艺术。

另外值得注意的是 这里的direct path read等待事件 后面没有temp关键字,而上一个实验有了个temp关键字,哈哈,这是10g的一大提高啊,我们看见了direct path read等待事件 就可以根据是否有temp关键字判断引起该等待事件是磁盘排序或者是并行查询了。

原文地址:https://www.cnblogs.com/hehe520/p/6330666.html