二维码
找好货

扫一扫关注

当前位置: 首页 » 资讯 » 跨境电商 » 正文

看懂sql_trace--分析执行计划及CBO行为

放大字体  缩小字体 发布日期:2022-07-13 07:01:29    作者:life    浏览次数:4454    评论:0
导读

概述Oracle数据库排查问题、实验测试、优化的时候一般都会用到trace文件来分析,这里面就涉及到sql_trace跟10046事件了,下面分别做一下介绍。 SQL_TRACESQL_TRACE是Oracle提供的用于进行SQL跟踪的手段

概述

Oracle数据库排查问题、实验测试、优化的时候一般都会用到trace文件来分析,这里面就涉及到sql_trace跟10046事件了,下面分别做一下介绍。


SQL_TRACE

SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法。不过我们这里主要用于描述SQL的执行过程的trace输出。

– SQL是如何操作数据的。

– SQL执行过程中产生了那些等待时间。

– SQL执行中消耗了多少资源。

– SQL的实际执行计划。

– SQL产生的递归语句。


set auto trace v.s. sql_trace(10046)

1、SET AUTO TRACE (EXPLAIN PLAN)

--输出优化器的产生的执行计划(估算值)

--当需要分析执行计划及CBO行为时,使用SET AUTO TRACE (EXPLAIN PLAN)

2、SQL_TRACE(10046)

– 查看SQL实际的执行情况

• 消耗的资源

• 产生的等待事件

• 数据的处理过程

当要看一条SQL的真实运行效果时,建议用10046事件。


查看SQL_TRACE trace文件

1、查看trace路径

这里也可以用命令来查,不过我习惯用oradebug了,简单很多。

oradebug setmypid oradebug tracefile_name --查看trace文件名及位置

2、原始的trace文件

这里主要说明下trace文件里面的一些参数,要不看不懂trace文件也白搭。

3、tkprof-格式化trace文件的工具

Tkprof是一个用于分析Oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是通过跟踪用户的会话并且使用Tkprof工具使用排序功能格式化输出,从而找出有问题的SQL语句。

1)格式:

tkprof tracefile outputfile [explain= ] [table= ] [print= ] [insert= ] [sys= ] [sort= ]

2)tkprof参数

3)实际例子

$tkprof /home/oracle/app/oracle/diag/rdbms/nwppdb/nwppdb/trace/nwppdb_ora_21793.trc out.txt aggregate=yes sys= no waits=yes sort=fchela

4)输出文件中列的含义

CALL :每次SQL语句的处理都分成三个部分 Parse :这步将SQL语句转换成执行计划,包括检查是否有正确的授权和所需要用到的表、列以及其他引用到的对象是否存在。 Execute: 这步是真正的由Oracle来执行语句。对于insert、update、delete操作,这步会修改数据,对于select操作,这步就只是确定选择的记录。 Fetch: 返回查询语句中所获得的记录,这步只有select语句会被执行。 COUNT: 这个语句被parse、execute、fetch的次数。 CPU: 这个语句对于所有的parse、execute、fetch所消耗的cpu的时间, 以秒为单位。 ELAPSED: 这个语句所有消耗在parse、execute、fetch的 总的时间。 DISK: 从磁盘上的数据文件中物理读取的块的数量。一般来说更想知道的是正在从缓存中读取的数据而不是从磁盘上读取的数据。 QUERY: 在一致性读模式下,所有parse、execute、fetch所获得的buffer的数量。一致性模式的buffer是用于给一个长时间运行的事务提供一个一致性读的快照,缓存实际上在头部存储了状态。 CURRENT: 在current模式下所获得的buffer的数量。一般在current模式下执行insert、update、delete操作都会获取buffer。在current模式下如果在高速缓存区发现有新的缓存足够给当前的事务使用,则这些buffer都会被读入了缓存区中。 ROWS: 所有SQL语句返回的记录数目,但是不包括子查询中返回的记录数目。对于select语句,返回记录是在fetch这步,对于insert、update、delete操作,返回记录则是在execute这步。


本来是想将sql_trace和10046事件写成一篇的,写着写着发现一些参数说明就占了很大一部分内容,内容比较多,所以分成两部分介绍好了。

后面会分享下10046事件方面的内容,感兴趣的朋友可以关注下!

 
关键词: cbo是什么意思
(文/life)
打赏
免责声明
• 
本文为life原创作品,作者: life。欢迎转载,转载请注明原文出处:https://www.114618.com/news/28578.html 。本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们。
0相关评论
 

(c)2008-2018 找好货 B2B SYSTEM All Rights Reserved

京ICP备2022008976号-2