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

求Oracle 10053 event的解读文档

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
Lucifer三思而后行
暂无图片

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

关于 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
打赏 0
暂无图片
回答交流
Markdown


请输入正文
提交
相关推荐
Oracle为什么要及时删除不用的触发器?
回答 1
已采纳
触发器定义之后,每次执行触发事件都会激活触发器并执行触发器中的语句。如果需求发生变化,而触发器没有进行相应的改变或者删除,那么触发器仍然会执行旧的语句,从而影响新的数据的完整性。因此,要将不再使用的触
收集统计信息总是报ora-01555
回答 2
3个建议:1.开启并行2.如果是分区表,&nbsp;建议开启增量收集3.如果不是分区表,&nbsp;降低采样比例
Oracle如何提高日志的切换频率?
回答 1
已采纳
通过参数archivelagtarget可以控制日志切换的时间间隔,以秒为单位,通过减少时间间隔,可以提高日志的切换频率。例如如下代码:SQL&gt;altersystemsetarchivelagt
请问下这个错误是不是oracle 需要给驱动包授权网络连接权限呢?
回答 2
根据你截图中的报错判断应该是权限问题:应该是在截图中server没有赋予那个jar包connect和resolve权限。
在oracle linux6 的哪个版本上可以支持 11g 的ACFS驱动?
回答 2
上传附件:ACFSSupportOnOSPlatforms.(DocID1369107.1).pdf
如何删除recover状态的datafile ?
回答 2
已采纳
alterdatabasedatafilexxxxofflinedrop;
ORA-04030问题
回答 1
内存确实太少了,sga建议给到8G,pga给到4g。可以参考下awr报告中给出的内存建议值。安装后的参数可以参考:《Oracle数据库系统上线checklist》:https://www.modb.p
OGG同步表对象trigger跟job问题
回答 3
是的,需要禁掉目标表的触发器、级联删除、约束和Job
如果启用了LOG_ARCHIVE_DEST_1 是否还受到v$recovery_file_dest的限制
回答 2
已采纳
1、刚测试了一下,这种情况下的归档目录已经不受dbrecoveryfiledestsize设置的限制了。2、其实你可以看,如果把归档放到了USEDBRECOVERYFILEDEST,那么他对归档的管理
请问各位老大,是否有oracle快速搭建dataguard的办法?
回答 4
已采纳
好像没有,我上两个月四十多套就是一套一套搭起来的