zoukankan      html  css  js  c++  java
  • 【Oracle】详解10053事件

    借助Oracle的10053事件event,我们可以监控到CBO对SQL进行成本计算和路径选择的过程和方法。
    10053事件有两个级别:
    Level 2:2级是1级的一个子集,它包含以下内容:
    Column statistics
    Single Access Paths
    Join Costs
    Table Joins Considered
    Join Methods Considered (NL/MS/HA)
    Level 1: 1级比2级更详细,它包含2级的所有内容,在加如下内容:
    Parameters used by the optimizer
    Index statistics
    启用10053事件
    ALTER SESSION SET EVENTS='10053 trace name context forever, level 1';
    ALTER SESSION SET EVENTS='10053 trace name context forever, level 2';
    关闭10053事件:
    ALTER SESSION SET EVENTS '10053 trace name context off';
    说明:
    1、sqlplus中打开autotrace看到的执行计划实际上是用explain plan 命令得到的,explain plan 命令不会进行bind peeking。应该通过v$sql_plan查看SQL的真实的执行计划。
    2、10053只对CBO有效,而且如果一个sql语句已经解析过,就不会产生新的trace信息。

    3、10053事件产生的trace文件不能用tkprof格式化。

    4.通过10053事件分析一个SQL执行计划的产生过程,需要贴出trace中的相关信息和必要的文字说明。


    测试:

    1)创建测试表t1,t2

    SQL> create table t1 as select * from all_objects;

    Table created.

    SQL> create table t2 as select * from all_objects where rownum<=100;

    Table created.

    SQL> select count(*) from t1;

      COUNT(*)
    ----------
          5756

    SQL> select count(*) from t2;

      COUNT(*)
    ----------
           100

    2)对t1,t2表进行分析,不包含直方图

    SQL> exec dbms_stats.gather_table_stats ('scott','t1',cascade=>true,estimate_percent=>null,method_opt=>'for all columns size 1');

    PL/SQL procedure successfully completed.

    SQL> exec dbms_stats.gather_table_stats ('scott','t2',cascade=>true,estimate_percent=>null,method_opt=>'for all columns size 1');

    PL/SQL procedure successfully completed.

    3)生成10053 trace文件

    SQL> conn / as sysdba
    Connected.

    SQL> alter session set events '10053 trace name context forever,level 1';

    Session altered.

    SQL> select count(*) from scott.t1,scott.t2 where t1.object_id=t2.object_id;

      COUNT(*)
    ----------
           100

    SQL> alter session set events '10053 trace name context off';

    Session altered.

    SQL> select value from v$diag_info where name like '%Default%';

    VALUE
    --------------------------------------------------------------------------------
    /u01/app/oracle/diag/rdbms/drz/drz/trace/drz_ora_10614.trc

    4)查看trace文件

    [oracle@drz ~]$ more /u01/app/oracle/diag/rdbms/drz/drz/trace/drz_ora_10614.trc


  • 相关阅读:
    Java中使用责任链模式
    Java中使用策略模式
    C++字符画圈
    C/C++结构体
    C++判断闰年&日期之差&给定日期求星期几
    C++重载<运算符及排序结构体
    Spring Boot笔记 #02# 构建RESTful Web服务(官方)
    IntelliJ IDEA修改默认的全局Maven路径
    Spring Boot笔记 #01# 快速入门(官方)
    获取某个时间的前一天
  • 原文地址:https://www.cnblogs.com/NextAction/p/7366661.html
Copyright © 2011-2022 走看看