• 使用并行查询模拟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关键字判断引起该等待事件是磁盘排序或者是并行查询了。

  • 相关阅读:
    SharePoint讨厌“+”吗?
    如何判断文件是否在占用?
    深入浅出SharePoint——设置站点的默认欢迎页面
    深入浅出SharePoint——通过Feature部署Webpart
    VS2008只支持jQuery1.4.1以下版本
    深入浅出SharePoint——Group的常用操作
    深入浅出SharePoint——更新计算列
    深入浅出SharePoint——计算列如何使用Item的ID
    深入浅出SharePoint——在VS2008中正确定义Webpart并通过feature来部署
    理解Javascript_10_对象模型
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330666.html
Copyright © 2020-2023  润新知