Oracle 10046事件 介绍(二) ---tkprof
之前简单的写了10046事件介绍的文章http://www.52php.cn/article/p-xoxjiolz-xe.html,当然收集10046 trace不是最终的目的,能够读懂并且通过分析10046 trace进而分析相应sql的性能问题才是10046 trace真正发挥作用的地方。但是10046事件所产生的原始trace文件习惯称之为裸trace文件(raw trace),Oracle记录在裸trace文件中的内容一眼看上去并不是那么观,也不是那么容易看懂。为了?trace文件能够以一种更直观、更容易懂的方式展现出来,Oracle提供了tkprof命令,这个命令是Oracle自带的,可以用它来翻译?trace文件。 1、tkprof的语法: tkproffilename1filename2[waits=yes|no][sort=option][print=n] [aggregate=yes|no][insert=filename3][sys=yes|no][table=schema.table] [explain=user/password][record=filename4][width=n] 最简单的使用方法是tkprof trace_filename output_filename 具体使用方法及参数含义参考官方文档http://docs.oracle.com/cd/E11882_01/server.112/e41573/sqltrace.htm#PFGRF94985 tkprof生成的输出文件中会包含一些Oracle内部调用的sql的trace记录,这些SQL是由用户的SQL触发,一般来说是查一些数据字典基表例如 obj$、tab$等,常规情况下这些SQL运行消耗的资源和时间都非常少。我们不需要关心,我们关心的就是我们运行的sql所对应的各种信息。 2、一个简单sql对应的trace经过tkprof后的示例 SQLID:484dcpmb3vazuPlanHash:2949544139 select* from scott.empwhereempno=:x callcountcpuelapseddiskquerycurrentrows ----------------------------------------------------------------------- Parse10.000.000000 Execute10.000.000000 Fetch20.000.000201 ----------------------------------------------------------------------- total40.000.000201 Missesinlibrarycacheduringparse:1 Optimizermode:ALL_ROWS Parsinguserid:SYS Numberofplanstatisticscaptured:1 Rows(1st)Rows(avg)Rows(max)RowSourceOperation --------------------------------------------------------------------------------- 111TABLEACCESSBYINDEXROWIDEMP(cr=2pr=0pw=0time=38uscost=1size=38card=1) 111INDEXUNIQUESCANPK_EMP(cr=1pr=0pw=0time=19uscost=0size=0card=1)(objectid87109) Elapsedtimesincludewaitingonfollowingevents: EventwaitedonTimesMax.WaitTotalWaited ----------------------------------------Waited---------------------- SQL*Netmessagetoclient20.000.00 SQL*Netmessagefromclient20.010.01 3、各部分详细分析 1)第一部分是SQL ID、Plan Hash和sql文本 SQLID:484dcpmb3vazuPlanHash:2949544139 select* from scott.empwhereempno=:x 2)第二部分是此次SQL运行时各项指标的统计信息的汇总 callcountcpuelapseddiskquerycurrentrows ----------------------------------------------------------------------- Parse10.000.000000 Execute10.000.000000 Fetch20.000.000201 ----------------------------------------------------------------------- total40.000.000201 行名解释
列名解释
3)第三部分Library Cache information 列出了语句在解析和执行阶段时library cache miss的次数,如果语句没有library cache miss,则tkprof不显示。还列出了优化器模式等信息 Missesinlibrarycacheduringparse:1 Optimizermode:ALL_ROWS Parsinguserid:SYS Numberofplanstatisticscaptured:1 4)第四部分为Row source plan Rows(1st)Rows(avg)Rows(max)RowSourceOperation --------------------------------------------------------------------------------- 111TABLEACCESSBYINDEXROWIDEMP(cr=2pr=0pw=0time=38uscost=1size=38card=1) 111INDEXUNIQUESCANPK_EMP(cr=1pr=0pw=0time=19uscost=0size=0card=1)(objectid87109)
第五部分:语句执行的等待事件信息 包括各个等待事件的等待次数和等待时间。 Elapsedtimesincludewaitingonfollowingevents: EventwaitedonTimesMax.WaitTotalWaited ----------------------------------------Waited---------------------- SQL*Netmessagetoclient20.000.00 SQL*Netmessagefromclient20.010.01 官方文档:http://docs.oracle.com/cd/E11882_01/server.112/e41573/sqltrace.htm#PFGRF01010 参考文档:https://blogs.oracle.com/askmaclean/entry/maclean%E6%95%99%E4%BD%A0%E8%AF%BBoracle_10046_sql_trace MOS文档:TKProf Interpretation (9i and above) (文档 ID 760786.1) Interpreting Raw SQL_TRACE output (文档 ID 39817.1) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |