暂无图片
求Oracle 10053 event的解读文档
我来答
分享
云毅
2021-09-02
求Oracle 10053 event的解读文档

求Oracle 10053 event的解读文档

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
三笠丶
暂无图片

文档官方没有正式的提供,只能从网上获取了,将就看吧~

关于 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中的相关信息和必要的文字说明。

深入解析10053事件

你是否想知道一句sql语句如何执行,它是否走索引,是否采用不同得驱动表,是否用nestloop join,hash join……?这一切对你是否很神秘呢?或许你会说execution plan能看到这些东西,但是你是否清楚execution plan是如何得到?这篇文章就是给出了隐藏在execution plan底下的具体实现。

10053事件

10053事件是oracle提供的用于跟踪sql语句成本计算的内部事件,它能记载CBO模式下oracle优化器如何计算sql成本,生成相应的执行计划。

如何设置10053事件

1、设置本session的10053

开启:

Alter session set events10053 trace name context forever[,level {1/2}]’;

关闭:

Alter session set events10053 trace name context off’;

2、设置其他session的10053

开启:

SYS.DBMS_SYSTEM.SET_EV (<sid>, <serial#>, 10053, {1|2}, '')

关闭:

SYS.DBMS_SYSTEM.SET_EV (<sid>, <serial#>, 10053,0, '')

跟其他跟踪事件不同,10053提供了两个跟踪级别,但是级别2的跟踪信息比级别1少(其他跟踪事件如10046跟踪级别越高信息越多),跟踪信息将被记 录到user_dump_dest目录底下。注意,要实现跟踪必须满足两个条件:sql语句必须被hard parse并且必须使用CBO优化器模式。如果sql语句已经被parse过,那么10053不生成跟踪信息。如果你使用RULE优化器,那么10053 也不会生成跟踪信息。

跟踪内容

跟踪文件包括6部分:

  • Sql语句
  • 优化器相关参数
  • 基本统计信息
  • 基本表访问成本
  • 综合计划
  • 特殊功能的成本重计算

这篇文章将会涉及到前4项和一部分第5项的内容,我们将会用以下语句作为例子:

select dname, ename from emp, dept where emp.deptno = dept.deptno and ename = :b1

这部分是整个跟踪文件里最容易理解的部分,包括了所执行的sql语句,如果你采用RULE模式优化器,那么除了这一部分外将不会有多余信息出现在跟踪文件里。

优化器相关参数:

记载了所有影响成本计算的参数

***************************************
PARAMETERS USED BY THE OPTIMIZER
********************************
OPTIMIZER_FEATURES_ENABLE = 8.1.6
OPTIMIZER_MODE/GOAL = Choose
OPTIMIZER_PERCENT_PARALLEL = 0
HASH_AREA_SIZE = 131072
HASH_JOIN_ENABLED = TRUE
HASH_MULTIBLOCK_IO_COUNT = 0
OPTIMIZER_SEARCH_LIMIT = 5
PARTITION_VIEW_ENABLED = FALSE
_ALWAYS_STAR_TRANSFORMATION = FALSE
_B_TREE_BITMAP_PLANS = FALSE
STAR_TRANSFORMATION_ENABLED = FALSE
_COMPLEX_VIEW_MERGING = FALSE
_PUSH_JOIN_PREDICATE = FALSE
PARALLEL_BROADCAST_ENABLED = FALSE
OPTIMIZER_MAX_PERMUTATIONS = 80000
OPTIMIZER_INDEX_CACHING = 0
OPTIMIZER_INDEX_COST_ADJ = 100
QUERY_REWRITE_ENABLED = TRUE
QUERY_REWRITE_INTEGRITY = ENFORCED
_INDEX_JOIN_ENABLED = FALSE
_SORT_ELIMINATION_COST_RATIO = 0
_OR_EXPAND_NVL_PREDICATE = FALSE
_NEW_INITIAL_JOIN_ORDERS = FALSE
_OPTIMIZER_MODE_FORCE = TRUE
_OPTIMIZER_UNDO_CHANGES = FALSE
_UNNEST_SUBQUERY = FALSE
_PUSH_JOIN_UNION_VIEW = FALSE
_FAST_FULL_SCAN_ENABLED = TRUE
_OPTIM_ENHANCE_NNULL_DETECTION = TRUE
_ORDERED_NESTED_LOOP = FALSE
_NESTED_LOOP_FUDGE = 100
_NO_OR_EXPANSION = FALSE
_QUERY_COST_REWRITE = TRUE
QUERY_REWRITE_EXPRESSION = TRUE
_IMPROVED_ROW_LENGTH_ENABLED = TRUE
_USE_NOSEGMENT_INDEXES = FALSE
_ENABLE_TYPE_DEP_SELECTIVITY = TRUE
_IMPROVED_OUTERJOIN_CARD = TRUE
_OPTIMIZER_ADJUST_FOR_NULLS = TRUE
_OPTIMIZER_CHOOSE_PERMUTATION = 0
_USE_COLUMN_STATS_FOR_FUNCTION = FALSE
_SUBQUERY_PRUNING_ENABLED = TRUE
_SUBQUERY_PRUNING_REDUCTION_FACTOR = 50
_SUBQUERY_PRUNING_COST_FACTOR = 20
_LIKE_WITH_BIND_AS_EQUALITY = FALSE
_TABLE_SCAN_COST_PLUS_ONE = FALSE
_SORTMERGE_INEQUALITY_JOIN_OFF = FALSE
_DEFAULT_NON_EQUALITY_SEL_CHECK = TRUE
_ONESIDE_COLSTAT_FOR_EQUIJOINS = TRUE
DB_FILE_MULTIBLOCK_READ_COUNT = 32
SORT_AREA_SIZE = 131072

基本统计信息:

下一部分是所有表和索引的基本统计信息
基本统计信息包括

表:
Trace label         dba_tables column
CDN                     NUM_ROWS                       表记录数
NBLKS                   BLOCKS                           高水位以下的block数
TABLE_SCAN_CST                                           全表扫描的I/O成本
AVG_ROW_LEN      AVG_ROW_LEN                       平均行长

10053事件没有10046事件用的多,比如我们分析SQL,主要还是看SQL的执行计划和SQL_TRACE信息。 但是如果想了解CBO的内部,还得通过10053事件,从10053事件的trace文件中,我们可以深入的了解CBO的内部,了解CBO是如何工作的,根据什么依据得出最终的执行计划。

如果帮助到你,动动小手点个采纳~

暂无图片 评论
暂无图片 有用 0
暂无图片
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏