Oracle性能分析2:trace文件解读

下面是trace文件中的一个片段,表示一个SQL执行的过程,一个trace文件由很多这样的片段组成:

PARSING IN CURSOR #4 len=135 dep=1 uid=0 oct=3 lid=0 tim=777069789359 hv=1115215392 ad='33e7e384'
select /*+ index(idl_char$ i_idl_char1) +*/ piece#,length,piece from idl_char$ where obj#=:1 and part=:2 and version=:3 order by piece#
END OF STMT
PARSE #4:c=0,e=12,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim=777069789357
--BINDS #2:
EXEC #4:c=0,e=14,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim=777069789415
--WAIT #2: nam='SQL*Net message from client' ela= 143 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=775454461373
FETCH #4:c=0,e=18,p=0,cr=4,cu=0,mis=0,r=1,dep=1,og=4,tim=777069789450
FETCH #4:c=0,e=5,p=0,cr=1,cu=0,mis=0,r=0,dep=1,og=4,tim=777069789477
STAT #4 id=1 cnt=1 pid=0 pos=1 obj=74 op='TABLE ACCESS BY INDEX ROWID IDL_CHAR$ (cr=4 pr=0 pw=0 time=20 us)'
STAT #4 id=2 cnt=1 pid=1 pos=1 obj=115 op='INDEX RANGE SCAN I_IDL_CHAR1 (cr=3 pr=0 pw=0 time=12 us)'

以"--"开头是人为添加的,在其它查询中可能存在,下面关键字段的含义:

1)PARSING IN CURSOR和END OF STMT包含了SQL语句文本;

2)PARSE、EXEC和FETCH分别表示解析(parse)、执行(execution)和获取(fetch)调用;

3)BINDS表示绑定变量的定义与值;

4)WAIT表示在处理过程汇总发生的等待事件;

5)STAT表示产生的执行计划以及相关的统计。

下面是更细致的一些解释(来自:Interpreting Raw SQL_TRACE and DBMS_SUPPORTSTART_TRACE output),由于Oracle每个版本都有差异,所以这些内容仅供参考。

-------------------------------------------------------------------------

PARSING IN CURSOR # len=X dep=X uid=X oct=X lid=X tim=X hv=X ad=‘X‘

SQL语句

END OF STMT

--------------------------------------------------------------------------

len:SQL语句长度

dep:游标递归调用的深度

uid:分析SQL的用户ID

oct:ORACLE命令类型

lid:特权用户id

tim:时间抽。ORACLE 9i以前,单位仅仅为1/100秒;ORACLE 9i之后单位为1/1000000秒。时间戳可以用来决定两点之间的时间间隔。该数值取自v$timer中的数值,可以用2个操作的‘tim‘差决定绝对时间

hv:SQL HASH ID(对应V$SQLAREA视图和V$SQLTEXT视图的HASH_VALUE字段)

ad:SQLTEXT地址(对应V$SQLAREA视图和V$SQLTEXT视图的ADDRESS字段)

--------------------------------------------------------------------------

PARSE ERROR #%d:len=%ld dep=%d uid=%ld oct=%d lid=%ld tim=%lu err=%d

SQL语句

--------------------------------------------------------------------------

len:SQL语句长度

dep:游标递归调用的深度

uid:分析SQL的用户ID

oct:ORACLE命令类型

tim:时间抽。同上

err:Oracle错误代码(e.g.ORA-XXXXX)

--------------------------------------------------------------------------

PARSE #:c=0,e=0,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=0

EXEC  #:c=0,e=0,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=0

FETCH #:c=0,e=0,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=0

UNMAP #:c=0,e=0,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=0

--------------------------------------------------------------------------

操作:

1)PARSE:解析SQL

2)EXEC:执行已经分析的SQL

3)FETCH:从游标中获取记录

4)UNMAP:如果游标使用了临时表,当游标关闭的时候,该操作用来释放临时表资源(释放锁、删除状态对象、释放临时段等)。在tkprof产生的报告中,UNMAP的统计信息加入到EXECUTE操作的统计信息中。

5)SORT UNMAP:如上类似,但是为OS文件排序或者TEMP表段(segment)

c:CPU time(1/100秒在Oracle7、8和9)

e:Elapsed time(1/100秒在Oracle7、8,微秒在Oracle 9和之后版本)

p:物理读(Number of physical reads)

cr:CR(consistent read,一致性读)读的数量

cu:在当前模式(current mode)下读的数量

mis:cursor在缓存中错过的数量

r:涉及的记录数量

dep:递归调用深度(0 = user SQL,>0 = recursive)

og:优化器模式:1=All_Rows,2=First_Rows,3=Rule,4=Choose

tim:时间戳,用于确定两个操作之间的时间

--------------------------------------------------------------------------

ERROR #%d:err=%d tim=%lu

--------------------------------------------------------------------------

一个execution或者tetch错误后的错误展示

err:在堆栈顶的Oracle错误码(例如:ORA-XXXX)

tim:时间戳

--------------------------------------------------------------------------

STAT #<CURSOR> id=N cnt=0  [pid=0 pos=0 obj=0 op=‘SORT AGGREGATE ‘]

--------------------------------------------------------------------------

STAT:为<CURSOR>的执行计划统计报告

<CURSOR>:统计应用到的Cursor

id:执行计划中个操作在执行计划树中的编号

cnt:涉及的行数

pid:这行的父id

pos:在执行计划中的位置

obj:行的对象id(如果这是一个基本对象)

op:行涉及的操作

--------------------------------------------------------------------------

XCTEND rlbk=%d rd_only=%d

--------------------------------------------------------------------------

XCTEND:事务结束标志

rlbk:1表示rollback,0表示commit

rd_only:事务只读则是1,写则是0

注:下面的只有当WAITS或者BINDS出现时才存在

--------------------------------------------------------------------------

BINDS #%d:

bind 0: dty=2 mxl=22(22) mal=00 scl=00 pre=00 oacflg=03 oacfl2=0 size=24 offset=0

bfp=02fedb44 bln=22 avl=00 flg=05

value=10

--------------------------------------------------------------------------

BIND:游标绑定变量

bind N:绑定变量位置

dty:数据类型

mxl:绑定变量最大长度

mal:数组长度

scl:规模(Scale)

pre:进度(precision)

oacflg:表明绑定选项的特定标志

oacfl2:oacflg的延续

size:为这块分配的内存

offset:为这个绑定缓存进入这块的偏移量

bfp:绑定地址

bln:绑定缓存长度

avl:实际值长度(也是数组长度)

flg:表明绑定状态的特定标志

value:绑定变量的实际值

--------------------------------------------------------------------------

WAIT #<CURSOR>: nam="" ela=0 p1=0 p2=0 p3=0

--------------------------------------------------------------------------

WAIT:等待事件信息

nam:等待事件名称

ela:操作花费的时间

p1:为等待事件提供的参数p1

p2:为等待事件提供的参数p2

p3:为等待事件提供的参数p3

Example (Full Table Scan):

WAIT #1: nam="db file scattered read" ela= 5 p1=4 p2=1435 p3=25

WAITing under CURSOR no 1

for "db file scattered read"

解读:我们等待0.05秒。为一个读:文件4,开始块1435,共25块

Example (Index Scan):

WAIT #1: nam="db file sequential read" ela= 4 p1=4 p2=1224 p3=1

WAITing under CURSOR no 1

for "db file sequential read"

解读:我们等待0.04秒,为单块读(p3=1),从文件4,开始块1224

Oracle性能分析2:trace文件解读

时间: 2024-12-21 17:00:17

Oracle性能分析2:trace文件解读的相关文章

Oracle性能分析1:开启SQL跟踪和获取trace文件

当Oracle查询出现效率问题时,我们往往需要了解问题所在,这样才能针对问题给出解决方案.Oracle提供了SQL执行的trace信息,其中包含了SQL语句的文本信息,一些执行统计,处理过程中的等待,以及解析阶段(如生成执行计划)产生的信息.这些信息有助于你分解sql语句的服务时间和等待时间,并了解所用资源和同步点的详细信息,从而帮助你诊断存在的性能问题. 这篇文章介绍了怎么开启SQL跟踪和获取trace文件,详细信息如下. 开启SQL跟踪 从内部技术细节看,SQL跟踪是基于10046调试事件的

Oracle性能分析3:TKPROF介绍

tkprof是Oracle自带的一个命令行工具,主要作用是将原始的跟踪文件转换为格式化的文本文件,最简单的使用方式如下: tkprof ly_ora_128636.trc ly_ora_128636.txt tkprof带有很多参数,在多数情况下,使用这些参数对你的分析将很有帮助. tkprof参数 如果不带任何参数运行tkprof,它将打印出完整的参数列表,并带有简单的描述.下面是对参数的说明: explain 为每个SQL语句提供一个执行计划.该参数需要指定用户.密码,也可以指定数据库连接串

Oracle性能分析工具介绍及使用

oracle数据库级别优化分析工具介绍 当我们对数据库优化诊断时,需要收集相应的信息以供参考,从个人的使用经验来说,这种统计数据分为两大类 一类是数据库级别的统计信息二类是os级别的统计信息 下面就分别介绍在不同的级别下,常用什么工具来收集信息帮助优化诊断 首先是oracle数据库级别优化分析工具介绍 目录: 1.statspack2.ASH3.AWR4.ORACLE EXPLAIN PLAN的总结(查询sql的执行计划)   a.autotrace   b.explain的使用 1.stats

Oracle性能分析4:数据访问方法之全扫描

SQL语句执行时,Oracle的优化器会根据统计信息确定表的访问方式,一般来说,有两种基本的数据访问方式:1)全扫描.在全扫描(全表扫描或者快速全索引扫描)中,多个块被读入到一个IO运算中.2)索引扫描.索引扫描首先扫描索引叶子块以取得特定的行id(rowid),然后利用这些行id来访问父表取得实际的行数据,访问通过单块读取来完成.这里主要讲解全扫描方式,后面将介绍索引扫描. 使用全扫描 当对一个表进行全扫描时,会将表中所有数据块(block)取出并进行处理,筛选出符合条件的数据.注意Oracl

Oracle性能分析7:索引的使用

这一节主要讲述索引的使用,首先介绍怎么在查询中避免使用索引,然后介绍优化器怎么判断是否使用索引,并介绍了强制使用索引的方法,最后介绍了Oracle的并行处理方法. 避免使用索引 虽然你创建了索引,但有些查询你可能需要避免使用这些索引,或者你为了做一些测试,希望看看各种情况下查询的情况,也希望能够避免使用一些索引或者索引扫描方式.Oracle提供了方式来达到这些目地,就是在查询中使用hint信息,具体情况如下. 避免使用某个索引 如果索引的选择性很差,那么也许使用其它索引或者使用全表扫描的效率会更

Oracle性能分析12:对象统计信息

对象统计信息描述数据是如何在数据库中存储的,查询优化器使用这些统计信息来做出正确的决定.Oracle中有三种类型的对象统计信息:表统计.列统计和索引统计.而在每种类型中,有细分为:表或索引级别的统计.分区级别统计和子分区级别的统计,后面两种只有在对象被分区和具有子分区的情况下才可用. 统计信息相关视图 表统计信息 表/索引级别的统计 user_tab_statistics user_tables 分区级别的统计 user_tab_statistics user_tab_partitions 子分

Oracle性能分析3:TKPROF简介

tkprof它是Oracle它配备了一个命令直插式工具,其主要作用是将原始跟踪文件格文本文件的类型,例如,最简单的方法,使用下面的: tkprof ly_ora_128636.trc ly_ora_128636.txt tkprof带有非常多參数,在多数情况下,使用这些參数对你的分析将非常有帮助. tkprof參数 假设不带不论什么參数执行tkprof,它将打印出完整的參数列表,并带有简单的描写叙述.以下是对參数的说明: explain 为每一个SQL语句提供一个运行计划. 该參数须要指定用户.

Oracle性能分析9:重建索引

当索引出现问题时,会导致严重的性能问题,索引问题包括索引不可用.索引碎片导致性能下降,我们需要一些手段在检测索引的问题,并解决这些问题.这一篇将为你讲述怎么定位索引问题,并提供了解决的办法. 索引不可用 索引不可用的原因有很多,包括: 1)索引空间耗尽,导致SQL*Loader更新索引失败: 2)创建索引的过程中实例失败: 3)唯一键有重复值: 4)某个索引的顺序与sorted indexes子句中指定的顺序不同: 5)移动表或表分区(alter table move和alter table m

oracle之 利用 controlfile trace文件重建控制文件

一. 11g RAC 重建控制文件 1. --"create controlfile"命令生成到追踪文件中:alter database backup controlfile to trace; 2. --确认追踪文件的路径:SQL> select value from v$diag_info where name='Default Trace File'; 3. -- 截取脚本 在追踪文件中找到并执行NORESETLOGS版本的"create controlfile&