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

  • 相关阅读:
    (十三)页面权限控制
    (十二)用户管理模块
    Vue笔记:生命周期和钩子函数
    (十一)第三方图标库
    (十)动态加载菜单
    windows下php配置环境变量
    docker在mac下安装及配置阿里云镜像加速
    pm2-web监控
    PHP判断两个矩形是否相交
    ubuntu下安装ffmpeg扩展
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330666.html
Copyright © 2011-2022 走看看