仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 724|回复: 9
打印 上一主题 下一主题

[学习教程] MSSQL网页编程之懂得raw trace文件的各项内容

[复制链接]
活着的死人 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:38:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在Windows中MySQL以服务形式存在,在使用前应确保此服务已经启动,未启动可用netstartmysql命令启动。而Linux中启动时可用“/etc/rc.d/init.d/mysqldstart"命令,注意启动者应具有管理员权限。
明天扫瞄metalink,看到这篇InterpretingRawSQL_TRACE,对照老的一篇文章了,可是的确很有效,以是决意大抵翻译一下吧。

我们晓得有几种办法能够失掉一个SQL语句实行时背景的trace文件,一个是用SQL_TRACE,一个是用DBMS_SUPPORT包大概DBMS_SYSTEM包,另有一种就是间接利用10046event。

利用10046event的办法大抵以下:

altersessionsetevents10046tracenamecontextforever,level12;<BR>

yoursqlstatement...

altersessionsetevents10046tracenamecontextoff;

个中的level有1,4,8,12几个选项,个中1相称于设置SQL_TRACE=TRUE以后的了局,4包含1的了局和绑定变量的实践值,8包含1的了局和守候事务的情形,12则同时包括1的了局,绑定变量的实践值和守候事务情形,以是能够说level12是最为具体的trace了。

同时我们也晓得,关于trace了局,oracle供应了tkprof有用程序用来格局化trace文件,供应一份更简单读懂的trace了局。

那末为何还要间接读取trace文件呢?最主要的是tkprof的了局是不包括绑定变量值的,同时也不包含真实的SQL实行按次,而trace文件中我们则能够看到依照工夫分列的parse,binds,executes,fetch等等,这在某西场所下是很有效处的。另有就是,假如你可以间接读取这些让人看得眼晕的trace,是否是会有一种很爽,很大家的感到:-)

固然假如我们要依据一些尺度(好比CPU时长,磁盘读取量等)举行trace中的SQL排序,那末tkprof是我们独一的选择,能够参看coolyl的Tkprof工具先容和剖析。



上面是metalink中的这篇文章的大致翻译,年夜部分名词用英文反而更好,就不强加翻译了,信任人人都看得懂。固然也是对照懒的缘故原由:-)



文本总结了trace了局原始输入文件中的内容。



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

APPNAMEmod=%smh=%luact=%sah=%lu

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



APPNAME:Applicationnamesetting。在Oracle7.2和以上版本中呈现。这个称号能够由DBMS_APPLICATION_INFO包来设定。

mod:Modulename

mh:Modulehashvalue

act:Action

ah:Actionhashvalue



好比:APPNAMEmod=SQL*Plusmh=3669949024act=ah=4029777240



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

PARSINGINCURSOR#<CURSOR>len=Xdep=Xuid=Xoct=Xlid=Xtim=Xhv=Xad=X

<statement>

ENDOFSTMT

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



<CURSOR>:Cursornumber

len:LengthofSQLstatement,SQL语句的长度

dep:Recursivedepthofthecursor,以后SQL语句的递规深度,假如为0则暗示是用户提交的SQL,为1则是因为用户SQL而招致Oracle背景本人实行的SQL,为2则是由1级SQL持续引发的下一级SQL。

uid:Schemauseridofparsinguser

oct:Oraclecommandtype.

lid:Privilegeuserid.

tim:Timestamp。在Oracle9i之前单元是1/100秒,9i则是1/1,000,000秒。使用这个值能够盘算一个SQL实行了究竟多长工夫。这个值就是以后行被写进trace文件时数据库V$TIMER视图的值。

hv:Hashid.

ad:SQLTEXTaddress,SQLTEXT的地点,跟V$SQLAREA和V$SQLTEXT视图中的ADDRESS字段值相称。

<statement>:TheactualSQLstatementbeingparsed.



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

PARSEERROR#%d:len=%lddep=%duid=%ldoct=%dlid=%ldtim=%luerr=%d

<statement>...

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



PARSEERROR:在Oracle7.2以上版本中剖析的毛病会写进trace文件中。

len:LengthofSQLstatement.

dep:Recursivedepthofthestatement

uid:Userid.

oct:Oraclecommandtype(ifknown).

lid:Privilegeuserid.

tim:Timestamp.

err:Oracleerrorcode(e.g.ORA-XXXXX)reported

<statement>:TheSQLstatementthaterrored.



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

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

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

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

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

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



PARSE:Parseastatement.剖析一个SQL

EXEC:Executeapre-parsedstatement.实行已剖析终了的SQL

FETCH:Fetchrowsfromacursor.从游标中失掉数据,一般指select前往纪录

UNMAP:假如游标利用了一时表(temporarytable),当游标封闭的时分将会看到UNMAP

c:CPUtime(100thsofasecondinOracle7,8and9).

e:Elapsedtime(100thsofasecondOracle7,8.MicrosecondsinOracle9onwards).

p:Numberofphysicalreads.

cr:NumberofbuffersretrievedforCRreads.

cu:Numberofbuffersretrievedincurrentmode.

mis:Cursormissedinthecache.

r:Numberofrowsprocessed.

dep:Recursivecalldepth(0=userSQL,>0=recursive).

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

tim:Timestamp(largenumberin100thsofasecond).



好比: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=%dtim=%lu

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



实行大概fetch以后呈现的SQLError

err:Oracleerrorcode(e.g.ORA-XXXXX)atthetopofthestack.

tim:Timestamp.



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

STAT#<CURSOR>id=Ncnt=0[pid=0pos=0obj=0op=SORTAGGREGATE]

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



<CURSOR>的实行企图.

<CURSOR>:Cursorwhichthestatisticsapplyto.

id:Lineoftheexplainplanwhichtherowcountappliesto(从1入手下手).

cnt:Numberofrowsforthisrowsource.

pid:Parentidofthisrowsource.

pos:Positioninexplainplan.

obj:Objectidofrowsource(ifthisisabaseobject).

op:Therowsourceaccessoperation.



好比:

STAT#2id=2cnt=0pid=1pos=1obj=510op=TABLEACCESSBYINDEXROWIDOBJECT_USAGE(cr=2r=0w=0time=83us)

STAT#2id=3cnt=1pid=2pos=1obj=511op=INDEXRANGESCANI_STATS_OBJ#(cr=1r=0w=0time=43us)



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

XCTENDrlbk=%drd_only=%d

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



XCTEND是事件停止的标记.

rlbk:1ifarollbackwasperformed,0ifnorollback(commit).

rd_only:1iftransactionwasreadonly,0ifchangesoccurred.



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

BINDS#%d:

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

bfp=02fedb44bln=22avl=00flg=05

value=10

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



BIND:Variablesboundtoacursor.

bindN:Thebindpositionbeingbound.

dty:Datatype.

mxl:Maximumlengthofthebindvariable(privatemaxleninparen).

mal:Arraylength.

scl:Scale.

pre:Precision.

oacflg:Specialflagindicatingbindoptions

oacflg2:Continuationofoacflg

size:Amountofmemorytobeallocatedforthischunk

offset:Offsetintothischunkforthisbindbuffer

bfp:Bindaddress.

bln:Bindbufferlength.

avl:Actualvaluelength(arraylengthtoo).

flg:Specialflagindicatingbindstatus

value:Theactualvalueofthebindvariable.



好比:

BINDS#4:

bind0:dty=2mxl=22(22)mal=00scl=00pre=00oacflg=08oacfl2=1size=24offset=0

bfp=ffffffff7ce64ee0bln=22avl=01flg=05

value=0

bind1:dty=1mxl=32(11)mal=00scl=00pre=00oacflg=18oacfl2=1size=32offset=0

bfp=ffffffff7ce6b128bln=32avl=11flg=05

value="TABCOMPART$"

bind2:dty=2mxl=22(22)mal=00scl=00pre=00oacflg=08oacfl2=1size=24offset=0

bfp=ffffffff7ce6bae8bln=24avl=02flg=05

value=1



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

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

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



WAIT:Aneventthatwewaitedfor.

nam:Whatwasbeingwaitedfor.

ela:Elapsedtimefortheoperation.

p1:P1forthegivenwaitevent.

p2:P2forthegivenwaitevent.

p3:P3forthegivenwaitevent.



好比(FullTableScan):

WAIT#1:nam="dbfilescatteredread"ela=5p1=4p2=1435p3=25

在游标1上履历了"dbfilescatteredread"守候事务,一共等了0.05秒,在读取File4,从1435block入手下手,读了25个block



好比(IndexScan):

WAIT#1:nam="dbfilesequentialread"ela=4p1=4p2=1224p3=1

在游标1上履历了"dbfilesequentialread"守候事务,一共等了0.04秒,在读取file4,block1224,读取了这一个block



关于每个守候事务的寄义和p1,p2,p3暗示的意义,能够参考OracleDatabaseReference文档的OracleWaitEvents章节。


对于update操作,只需要把event中的旧行和新行值对调即可。
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-1-19 20:07:44 来自手机 | 只看该作者
对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。
愤怒的大鸟 该用户已被删除
板凳
发表于 2015-1-19 20:07:44 | 只看该作者
是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。
小妖女 该用户已被删除
地板
发表于 2015-1-25 18:18:05 | 只看该作者
我个人认为就是孜孜不懈的学习
活着的死人 该用户已被删除
5#
 楼主| 发表于 2015-2-3 12:45:51 | 只看该作者
但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。
透明 该用户已被删除
6#
发表于 2015-2-9 01:10:08 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
变相怪杰 该用户已被删除
7#
发表于 2015-2-26 16:24:42 | 只看该作者
只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。
金色的骷髅 该用户已被删除
8#
发表于 2015-3-8 16:05:00 | 只看该作者
比如日志传送、比如集群。。。
灵魂腐蚀 该用户已被删除
9#
发表于 2015-3-16 04:06:01 | 只看该作者
如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。
只想知道 该用户已被删除
10#
发表于 2015-3-22 20:09:39 | 只看该作者
总感觉自己还是不会SQL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:59

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表