分享
 
 
 

了解raw trace文件的各项内容

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

今天浏览metalink,看到这篇Interpreting Raw SQL_TRACE,比较老的一篇文章了,但是确实很有用,所以决定大略翻译一下吧。

我们知道有几种方法可以得到一个SQL语句执行时后台的trace文件,一个是用SQL_TRACE,一个是用DBMS_SUPPORT包或者DBMS_SYSTEM包,还有一种就是直接使用10046 event。

使用10046 event的方法大致如下:

alter session set events '10046 trace name context forever, level 12';

your sql statement...

alter session set events '10046 trace name context off';

其中的level有1,4,8,12几个选项,其中1相当于设置SQL_TRACE=TRUE之后的结果,4包括1的结果和绑定变量的实际值,8包括1的结果和等待事件的情况,12则同时包含1的结果,绑定变量的实际值和等待事件情况,所以可以说level 12是最为具体的trace了。

同时我们也知道,对于trace结果,Oracle提供了tkprof实用程序用来格式化trace文件,提供一份更轻易读懂的trace结果。

那么为什么还要直接读取trace文件呢?最重要的是tkprof的结果是不包含绑定变量值的,同时也不包括真正的SQL执行顺序,而trace文件中我们则可以看到按照时间排列的parse,binds,executes,fetch等等,这在某西场合下是很有用处的。还有就是,假如你能够直接读取这些让人看得眼晕的trace,是不是会有一种很爽,很大师的感觉:-)

当然假如我们要根据一些标准(比如CPU时长,磁盘读取量等)进行trace中的SQL排序,那么tkprof是我们唯一的选择,可以参看coolyl(丫现在迷恋WOW,已经不理朝政了:-D)的Tkprof工具介绍和分析。

下面是metalink中的这篇文章的大体翻译,大部分名词用英文反而更好,就不强加翻译了,相信大家都看得懂。当然也是比较懒的原因:-)

文本总结了trace结果原始输出文件中的内容。

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

APPNAME mod='%s' mh=%lu act='%s' ah=%lu

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

APPNAME:Application name setting。在Oracle 7.2和以上版本中出现。这个名称可以由DBMS_APPLICATION_INFO包来设定。

mod:Module name

mh:Module hash value

act:Action

ah:Action hash value

比如:APPNAME mod='SQL*Plus' mh=3669949024 act='' ah=4029777240

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

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

statement....

END OF STMT

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

CURSOR:Cursor number

len :Length of SQL statement,SQL语句的长度

dep :Recursive depth of the cursor,当前SQL语句的递规深度,假如为0则表示是用户提交的SQL,为1则是由于用户SQL而导致Oracle后台自己执行的SQL,为2则是由1级SQL继续诱发的下一级SQL。

uid :Schema user id of parsing user

oct :Oracle command type.

lid :Privilege user id.

tim :Timestamp。在Oracle9i之前单位是1/100秒,9i则是1/1,000,000秒。利用这个值可以计算一个SQL执行了到底多长时间。这个值就是当前行被写入trace文件时数据库V$TIMER视图的值。

hv :Hash id.

ad :SQLTEXT address,SQLTEXT的地址,跟V$SQLAREA和V$SQLTEXT视图中的ADDRESS字段值相等。

statement :The actual SQL statement being parsed.

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

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

statement....

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

PARSE ERROR :在Oracle 7.2以上版本中解析的错误会写入trace文件中。

len :Length of SQL statement.

dep :Recursive depth of the statement

uid :User id.

oct :Oracle command type (if known).

lid :Privilege user id.

tim :Timestamp.

err :Oracle error code (e.g. ORA-XXXXX) reported

statement :The SQL statement that errored.

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

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

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

PARSE :Parse a statement. 解析一个SQL

EXEC :Execute a pre-parsed statement. 执行已经解析完毕的SQL

FETCH :Fetch rows from a cursor. 从游标中得到数据,通常指select返回记录

UNMAP :假如游标使用了临时表(temporary table), 当游标关闭的时候将会看到UNMAP

c :CPU time (100th's of a second in Oracle7 ,8 and 9).

e :Elapsed time (100th's of a second Oracle7, 8. Microseconds in Oracle 9 onwards).

p :Number of physical reads.

cr :Number of buffers retrieved for CR reads.

cu :Number of buffers retrieved in current mode.

mis :Cursor missed in the cache.

r :Number of rows processed.

dep :Recursive call depth (0 = user SQL, 0 = recursive).

og :Optimizer goal: 1=All_Rows, 2=First_Rows, 3=Rule, 4=Choose

tim :Timestamp (large number in 100ths of a second).

比如:FETCH #2:c=0,e=106,p=0,cr=3,cu=0,mis=0,r=1,dep=1,og=4,tim=6005498548671

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

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

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

执行或者fetch之后出现的SQL Error

err :Oracle error code (e.g. ORA-XXXXX) at the top of the stack.

tim :Timestamp.

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

STAT # id=N cnt=0 [pid=0 pos=0 obj=0 op='SORT AGGREGATE ']

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

CURSOR的执行计划.

CURSOR :Cursor which the statistics apply to.

id :Line of the eXPlain plan which the row count applies to (从1开始).

cnt :Number of rows for this row source.

pid :Parent id of this row source.

pos :Position in explain plan.

obj :Object id of row source (if this is a base object).

op : The row source Access operation.

比如:

STAT #2 id=2 cnt=0 pid=1 pos=1 obj=510 op='TABLE ACCESS BY INDEX ROWID OBJECT_USAGE (cr=2 r=0 w=0 time=83 us)'

STAT #2 id=3 cnt=1 pid=2 pos=1 obj=511 op='INDEX RANGE SCAN I_STATS_OBJ# (cr=1 r=0 w=0 time=43 us)'

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

XCTEND rlbk=%d rd_only=%d

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

XCTEND是事务结束的标志.

rlbk :1 if a rollback was performed,

0 if no rollback (commit).

rd_only :1 if transaction was read only, 0 if changes occurred.

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

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 :Variables bound to a cursor.

bind N :The bind position being bound.

dty :Data type.

mxl :Maximum length of the bind variable (private max len in paren).

mal :Array length.

scl :Scale.

pre :Precision.

oacflg :Special flag indicating bind options

oacflg2 :Continuation of oacflg

size :Amount of memory to be allocated for this chunk

offset :Offset into this chunk for this bind buffer

bfp :Bind address.

bln :Bind buffer length.

avl :Actual value length (array length too).

flg :Special flag indicating bind status

value :The actual value of the bind variable.

比如:

BINDS #4:

bind 0: dty=2 mxl=22(22) mal=00 scl=

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有