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

  • 相关阅读:
    Visual Studio 2010使用Visual Assist X的方法
    SQL Server 2000 评估版 升级到 SQL Server 2000 零售版
    双网卡多网络单主机同时访问
    开发即过程!立此纪念一个IT新名词的诞生
    delphi dxBarManager1 目录遍历 转为RzCheckTree2树
    5320 软件集合
    delphi tree 从一个表复制到另一个表
    DELPHI 排课系统课表
    长沙金思维 出现在GOOGLE的 金思维 相关搜索里啦!!
    如何在DBGrid的每一行前加一个单选框?
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330666.html
Copyright © 2011-2022 走看看