trace文件解读
*********************************************************************
示例:全表扫描的10046文件解读
*********************************************************************
注:trace文件略
· PARSING IN CURSOR #20 :这里的#20是游标号, 这个游标号非常重要, 后面的 FETCH 、WAIT、EXECUTE、PARSE 都通过这个游标号和前面的SQL联系起来。
注意可以看到 在执行PARSING IN CURSOR #20 后 ,PARSE #20之后没有紧跟着 #20游标的运行 ,而是跟了 #25、#26游标的运行情况, 仔细看一下 #25和#26他们是 系统递归的recursive SQL ,这些递归SQL由 用户的SQL触发,一般来说是查一些数据字典基表例如 obj$、tab$等,常规情况下 递归SQL运行消耗的资源和时间都非常少。
· LEN=44 指SQL的长度
· [O]CT=3 Oracle command type 指Oracle中命令分类的类型 可以通过 V$SQL.COMMAND_TYPE获得对应关系,11g中提供了 V$SQLCOMMAND 视图可以看到完整的对照列表,SQL> select command_type,command_name from V$SQLCOMMAND;
· LID=0 权限用户ID Privilege user id.
· TIM timestamp 一个时间戳, 在9i之前 这个指标的单位是 1/100 s 即 10ms 。 到9i以后单位为 1/1000000 的microsecond 。 这个时间戳可以用来判断 trace中2个点的时间差。 这个 TIm的值来自于V$TIMER视图,这个视图是Oracle内部计时用的。
· DEP=0 代表该SQL的递归深入(recursive depth),因为递归SQL可能再引发下一层的递归SQL, 如果DEP=0则说明不是递归SQL,如果DEP>0则说明是递归SQL。
· UID=0 UID即USERID 用以标明是谁在解析这个游标, 如果是0则说明是SYS 用户, 具体 用户名和UID对应可以通过如下查询获得:
select user#,name from user$;
· OG=1 OG 代表optimizer_mode ,具体对应关系见下表
0 游标不可见 或 优化器环境未合理创建
1 – ALL_ROWS
2 - FIRST_ROWS
3 – RULE
4 – CHOOSE
· mis=0 该指标说明library cache未发生miss,则本次解析 我们没有需要硬解析 而是采用软解析或者更好的方式。 硬解析在Oracle中成本是很高的。 注意由于在任何阶段包括PARSE/EXECUTE/FETCH阶段都可能发生游标被age out的现象,所以在这些阶段都会打印mis指标。如果mis>0则说明可能发生了硬解析。
· HV 代表这个SQL 的hash value , 10g之前没有SQL_ID 时 主要靠HASH VALUE 来定位一个SQL
· AD 代表SQLTEXT 的地址 来源于 V$SQLAREA.ADDRESS
· err 代表 Oracle错误代码 例如ORA-1555
· PARSE 是SQL运行的第一个阶段,解析SQL
· EXEC 是SQL运行的第二个阶段,运行已经解析过的语句
· FETCH 从游标中 fetch数据行
· UNMAP 是当游标使用临时表时,若游标关闭则使用UNMAP释放临时表相关的资源,包括释放锁和释放临时段
· C 比较重要的指标,代表本步操作消耗的CPU 时间片; 9i以后单位为microsecond
· E Elapsed Time ,代表本步操作消耗的自然时间, 9i以后单位为microsecond
这里存在一个问题例如 在例子中PARSE #20:c=2000,e=1087 CPU_TIME> Elapsed time ;理 论上 应当是 Elapsed Time = CPU TIME + WAIT TIME (等待事件的时间), 但是由于CPU TIME 和Elapsed time使用了不同 的clock时钟计时,所以在 2者都很短,或者 是CPU敏感的操作时 有可能 CPU TIME> Elapsed time。
相关的BUG 有:
Bug 4161114 : IN V$SQL, CPU_TIME > ELAPSED_TIME
Bug 7603849 : CPU_TIME > ELAPSED_TIME FOR CERTAIN SQL’S IN V$SQL
Bug 7580277 : ELAPSED_TIME SHOWING 0 FOR CERTAIN SQL’S IN V$SQL
Bug 8243074 : INCORRECT ELAPSED_TIME IN V$SQL
该问题可能 在12c中得到修复
· p 物理读的数目
· CR CR一致性读引起的buffer get 数目
· CU 当前读current read 引起的buffer get 数目
· r 处理的行数
· CLOSE #[CURSOR]:c=%u e=%u dep=%d type=%u tim=%u ==》一个游标关闭的例子
· CLOSE游标关闭
· type 关闭游标的操作类型
0 该游标从未被缓存且执行次数小于3次,也叫hard close
1 该游标从未被缓存但执行次数至少3次,若在session cached cursor中有free slot 则将该游标放入session cached cursor
2 该游标从未被缓存但执行次数至少3次,该游标置入session cached cursor的条件是讲老的缓存age out掉
3 该游标已经在缓存里,则还会去
· STAT #[CURSOR] id=N cnt=0 [pid=0 pos=0 bj=0 p='SORT AGGREGATE ']
· STAT 相关行反应解释执行计划的统计信息
· [CURSOR] 游标号
· id 执行计划的行数 从1开始
· cnt 该数据源的行数
· pid 该数据源的 父ID
· pos 在执行计划中的位置
· obj 对应数据源的 object id
· op= 数据源的访问操作,例如 FULL SCAN
11g 以上还提供如下信息:
STAT #2 id=1 cnt=26 pid=0 pos=1 bj=0 p=’HASH GROUP BY (cr=1143 pr=1139 pw=0 time=61372 us)’
STAT #2 id=2 cnt=77276 pid=1 pos=1 bj=96551 p=’TABLE ACCESS FULL FULLSCAN (cr=1143 pr=1139 pw=0 time=927821 us)’
· CR 代表一致性读的数量
· PR 代表物理读的数量
· pw 代表物理写的数量
· time 单位为microsecond,本步骤的耗时
· cost 本操作的优化器成本
· size 评估的数据源大小,单位为字节
· card 评估的优化器基数Cardinality.
· XCTEND 一个事务结束的标志,如XCTEND rlbk=0, rd_only=1
rlbk 如果是1代表 有回滚操作, 如果是0 代表不会滚 即 commit提交了
rd_only 如果是1代表 事务只读 , 如果是0 说明数据改变发生过
##绑定变量
BINDS #20:
kkscoacd
Bind#0
oacdty=96 mxl=2000(150) mxlc=00 mal=00 scl=00 pre=00
oacflg=03 fl2=1000000 frm=01 csi=873 siz=2000 ff=0
kxsbbbfp=7f9ccfec6420 bln=2000 avl=50 flg=05
value=”MACLEAN
· BINDS #20: 说明 绑定变量 是针对 20号游标的
· kkscoacd 是绑定变量相关的描述符
· Bind#0 说明是第0个变量
· oacdty data type 96 是 ANSI fixed char
· oacflg 代表绑定选项的特殊标志位
· size 为该内存chunk分配的内存大小
· mxl 绑定变量的最大长度
pre precision
scl Scale
kxsbbbfp buffer point
bln bind buffer length
· avl 实际的值的长度
· flg 代表绑定状态
· value=”MACLEAN 实际的绑定值
如果看到 “bind 6: (No oacdef for this bind)”类似的信息则说明在trace时 还没有定义绑定数据。 这可能是在trace时游标还没绑定变量。
WAIT #20: nam=’db file scattered read’ ela= 42 file#=1 block#=80386 blocks=7 obj#=96551 tim=1344883874069383
· WAIT #20 等待 20号游标的相关等待事件
· Nam 等待针对的事件名字,它的P1、P2、P3可以参考视图V$EVENT_NAME,也可以从V$SESSION、ASH中观察到等待事件
· ela 本操作的耗时,单位为microsecond
· p1,p2,p3 针对该事件的三个描述参数,见V$EVENT_NAME
在上例中针对 db file scattered read , P1为文件号, P2为 起始块号, p3为 读的块数, 即db file scattered read 是从 1号文件的第80386 个块开始一次读取了7个块。
注意在10046中 出现的WAIT 行信息 都是 已经结束的等待事件, 而当前等待则不会在trace中出现,直到这个当前等待结束。 你可以通过systemstate dump/errorstack等trace来获得当前等待信息。
trace文件解读的更多相关文章
- iOS instruments trace文件解析方案
前言 已很少写文章,不过这次感觉有必要写一下.因为: 1. 这个方案通过debug逆向得来,很有参考意义. 2. iOS这方面资料非常少,做这块时,无论国内外,翻遍了google,baidu都没太多合 ...
- NS2中trace文件分析
ns中模拟出来的时间最终会以trace文件的形式告诉我们,虽然说一般都是用awk等工具分析trace文件,但是了解trace文件的格式也是必不可少的.下面就介绍一下无线网络模拟中trace文件的格式. ...
- 解决因为I_JOB_NEXT问题导致job执行不正常,不停生成trace文件问题
今天同事说有个项目生产环境的目录老是满.查看了一下bdump目录,发现确实是平均1分钟生成一个8M左右的trace文件.查询了一下alert日志,发现是个job的报错引起的.具体查看了一下trace文 ...
- Oracle中有个tkprof来格式化oracle的trace文件
1.MySQL日志文件系统的组成2.慢查询日志3.慢查询日志演示long_query_time : 设定慢查询的阀值,超出次设定值的SQL即被记录到慢查询日志,缺省值为10sslow_query_lo ...
- Trace文件过量生成问题解决
查看用户临时文件(trace文件)所在位置 如果是trace文件(.trc)大导致的 SQL>show parameters user_dump_dest 在路径下查看 alert_log 文件 ...
- Oracle利用external table 查看trace文件
1. 用下面的语句找到trace文件的路径 select * from v$diag_info where name='Default Trace File'; 2. 创建一个directory用来加 ...
- Oracle 10046 trace文件分析
生成10046 trace文件: SQL> create table t10046 as select * from dba_objects; Table created. SQL> se ...
- [Oracle运维工程师手记] 如何从trace 文件,判断是否执行了并行
[Oracle运维工程师手记系列]如何从trace 文件,判断是否执行了并行 客户说,明明指定了并行的hint,OEM 却报说没有并行,并且提供了画面. 客户的SQL文长这样: INSERT/*+ p ...
- [性能调优]如何通过读PeopleSoft Trace文件来调优
理解PeopleSoft Trace文件对于解决性能问题是绝对有必要的.你可能面临一个问题,用户抱怨性能较慢,而OEM并没有补货SQL,你有2种方法选择:使用PeopleSoft trace检查或启用 ...
随机推荐
- POJ 3268 Silver Cow Party(Dijkstra算法求解来回最短路问题)
题目链接: https://vjudge.net/problem/POJ-3268 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently n ...
- MPLS笔记
Label一般是由运营商端的Router添加. 去往相同网段的数据包打相同的标签 基于每个数据包的负载均衡基于目的地的负载均衡 启用CEF无非做两件事:1.把路由表中条目进行优化,加入FIB:2.把A ...
- 看到他我一下子就悟了-- Lambda表达式
一直对Lambda表达式似懂非懂,平常也用过,就是不太明白有时候还要百度.周六去图书馆看书,看到下面这几句话,一下子就悟了: Lambda表达式(匿名函数),基本形式: (intput paramte ...
- .NET常用开发工具整理
版本控制和项目管理工具 VisualSVN和AnkhSVN:两款在Visual Studio中管理Subversion的插件.. NuGet和NuGetPackageExplorer:一组用于自动执行 ...
- java_二进制的前导的零
题目内容: 计算机内部用二进制来表达所有的值.一个十进制的数字,比如18,在一个32位的计算机内部被表达为00000000000000000000000000011000.可以看到,从左边数过来,在第 ...
- 通过AccessKey调用阿里云CDN接口刷新CDN资源案例
通过AccessKey远程调用阿里云CDN接口,快速实现自动化集成部署. CdnService.java package com.nfky.cdn; import com.aliyuncs.Defau ...
- C# Select
- Flask 中的 特殊装饰器before_request/after_request
before_request :在请求收到之前绑定一个函数做一些事情. after_request: 每一个请求之后绑定一个函数,如果请求没有异常. teardown_request: 每一个请求之后 ...
- canvas-star7.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- photoshop使用笔记-制作古代印章
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 第一步:新建图层400x400像素,白色背景的图层,并且复制图层 第二步:设置前景色为R230,G30,B30 第三步:选择圆角 ...