《OracleSQL跟踪技术_(技术篇)_TD_V108042.pptx》由会员分享,可在线阅读,更多相关《OracleSQL跟踪技术_(技术篇)_TD_V108042.pptx(74页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、()Oracle SQL跟踪技术在职员工(技术篇)部 门:培训部日 期:2012.03.23本文档及其所含信息为内部保密材料本文档及其所含信息为内部保密材料,由北京九恒星科技股份有限公司拥有由北京九恒星科技股份有限公司拥有,公司专属知识产权公司专属知识产权未经书面授权,不得对外泄露未经书面授权,不得对外泄露 COPYRIGHT 保留所有保留所有权利权利课程修订课程修订修订编号修订作者变更页码版本号变更日期课程状态备注第一次郭鹏1-74V1.02012-03-26待评审第二次第三次第四次第五次第六次课程介绍课程介绍您将掌握SQL跟踪技术原理、方法及过程,熟悉动态性能视图表的作用及用法,掌握SQL
2、Trace、TKPROF工具应用,并能分析各类ORACLE语句问题,为实际工作做到方法的指引。课程名称OracleSQL跟踪技术培训目标实施、开发、测试岗位各级技术人员培训对象2个小时培训课时培训方式面授课程层级初、中级培训内容纲要培训内容纲要通过本次培训,您将学习到以下核心内容:数据库连接体系结构客户端、服务器SQL跟踪原理及过程方法SQLTrace工具介绍、使用方法及实践TKPROF工具介绍、使用方法及实践目 录TABLE OF CONTENTS一、数据库连接体系介绍二、SQL 跟踪原理解析三、Oracle“SQL Tarce”工具用法四、Oracle“TKPROF”工具用法五、Q&A单击
3、此处添加段落文字内容DB DB 网络连接架构网络连接架构 多进程(单线程)P/T 单进程多线程 P/T 多进程多线程 P/T 流行单击此处添加段落文字内容三层技术架构三层技术架构DatabaseMCVCacheAJAX(Asynchronous JavaScript and XML)JPA(Hibernate EntityManager)JSPHTMLEXTServlet ControllerQuartzJBMPRPCJMS业务逻辑业务逻辑SpringJersey(JAXRS)WEB服务器单击此处添加段落文字内容DB DB 连接模式连接模式Oracle Server对外提供两种服务的链接:共享
4、服务器模式多个连接过来,则后台只有一个进程进行服务。专有服务器模式一个连接过来,则后台生成一个单独的进程进行服务。(select sid,serial#,username,status,program,server from v$session where username is not null;)单击此处添加段落文字内容DB DB 连接模式连接模式DB 采用专有服务器模式:目 录TABLE OF CONTENTS二、SQL 跟踪原理解析一、数据库连接体系介绍三、Oracle“SQL Tarce”工具用法四、Oracle“TKPROF”工具用法五、Q&A单击此处添加段落文字内容任务任务假如很
5、多用户访问DB服务器,我如何知晓:1.是那个用户访问DB服务器?2.那个用户对应那个事务?3.那个事务执行很慢?(如何找到对应SQL语句)单击此处添加段落文字内容stat查询两台计算机TCP、UDP连接情况信息Linux/UNIX下:netstatantpWin下:netstat-ano|findstrTCP工具工具单击此处添加段落文字内容跟踪、监控客户端连接跟踪、监控客户端连接dbdb服务器过程服务器过程步骤一:通过客户端连接步骤一:通过客户端连接DB服务器服务器单击此处添加段落文字内容跟踪、监控客户端连接跟踪、监控客户端连接dbdb服务器过程服务器过程步骤二:从步骤二:从DB服务器查询数据
6、库客户端连接信息。服务器查询数据库客户端连接信息。命令为:命令为:netstat antp|more 如下图红框所示,查看如下图红框所示,查看单击此处添加段落文字内容跟踪、监控客户端连接跟踪、监控客户端连接dbdb服务器过程服务器过程ps-ef|grep 4311ps-ef|grep 4317此时通过在DB服务器端运行netstat命令,我们找到与客户端通信的DB服务器端进程信息:4311和4317则:单击此处添加段落文字内容跟踪、监控客户端连接跟踪、监控客户端连接dbdb服务器过程服务器过程步骤三:通过步骤三:通过在客户端键入如下命令,查看客户端连接进程在客户端键入如下命令,查看客户端连接进
7、程信息及信息及客户端客户端进程进程信息:信息:netstat b netstat-ano单击此处添加段落文字内容工具介绍工具介绍采用工具:列出当前连接DB的用户数列出当前DB有多少事务查看当前执行的SQL语句DB服务器进程信息单击此处添加段落文字内容1.v$session数据字典关注点:SADDR:SessionaddressSID:唯一标识SessionidentifierPADDR:拥有这个会话的进程地址USERNAME:用户名空的标识是oracle的实例,后台进程的process内部sessionPROCESS:操作系统客户机进程IDMACHINE:客户端machinename。SQL_
8、ADDRESS:指当前执行的SQL语句的地址PREV_SQL_ADDR:找到上一次已经执行过的SQL语句地址SERVER:servertype(dedicatedorshared)OSUSER:客户端操作系统用户名PROGRAM:客户端应用程序STATUS:Statusofthesession:A.ACTIVE-SessioncurrentlyexecutingSQLB.INACTIVE-等待操作C.KILLED-被标注为删除selectsaddr,sid,paddr,PROCESS,username,statusfromv$session;v$sessionv$session单击此处添加段落
9、文字内容1.v$transaction数据字典关注点:ADDR:标识这个事务的唯一地址SES_ADDR:用户会话对象地址与session的SADDR挂钩selectADDR,SES_ADDRfromv$transaction;v$transactionv$transaction单击此处添加段落文字内容1.v$process数据字典:包含oracle运行的所有进程信息。常被用于将oracle或服务进程的操作系统进程ID与数据库session之间建立联系。关注点:ADDR:进程对象地址SPID:操作系统进程IDPID:Oracle进程identifierUSERNAME:操作系统进程的用户名。并非
10、Oracle用户名。PROGRAM:进程正在执行的程序,和v$session中的program类似。selectaddr,spidfromv$process;v$processv$process单击此处添加段落文字内容1.v$sql数据字典关注点:sql_text:前1000个字符addressselectsql_text,addressfromv$sql;v$sqlv$sql单击此处添加段落文字内容查看当前所有非系统用户的连接DB信息:spid(操作系统进程)-连接DB客户端的进程号(netstatantp查)machine-DB所在服务器机器名selectp.spid,sid,paddr,
11、s.program,osuser,machine,PROCESS,s.username,statusfromv$sessions,v$processpwherep.addr=s.paddrands.usernameisnotnull;练习练习单击此处添加段落文字内容动态性能视图分析动态性能视图分析获取客户端获取客户端、服务器端进程信息,结合、服务器端进程信息,结合dbdb数据字典,将数据字典,将获取获取一系列一系列数据数据库库信息:信息:#单击此处添加段落文字内容跟踪、监控客户端连接跟踪、监控客户端连接dbdb服务器过程服务器过程步骤四:步骤四:1.1.查询查询v$transaction数据字
12、典,数据字典,查看当前存在的事务信息查看当前存在的事务信息及及SES_ADDRSES_ADDR如下如下:select addr,ses_addr from v$transaction;select addr,ses_addr from v$transaction;2.2.根据根据v$transaction中中SES_ADDR字段,从字段,从v$session查询如下信息及对查询如下信息及对象的象的PADDRPADDR:selectsaddr,sid,paddr,username,statusfromv$session;selectsaddr,sid,paddr,serial#,username
13、,status,prev_sql_addr,prev_hash_valuefromv$session;单击此处添加段落文字内容跟踪、监控客户端连接跟踪、监控客户端连接dbdb服务器过程服务器过程3.3.根据根据v$sessionv$session中信息及中信息及PADDRPADDR,从,从v$processv$process表中查询表中查询ADDRADDR及及 服务器服务器端对应的进程端对应的进程SPIDSPID:selectaddr,spidfromv$process;单击此处添加段落文字内容跟踪、监控客户端连接跟踪、监控客户端连接dbdb服务器过程服务器过程4.4.根据从根据从v$proc
14、essv$process表中查询到的表中查询到的SPID SPID,通过如下查询该,通过如下查询该DBDB服务器服务器运行运行 的的进程信息:进程信息:单击此处添加段落文字内容跟踪、监控客户端连接跟踪、监控客户端连接dbdb服务器过程服务器过程5.5.在在DBDB服务器端运行命令,如下所示:服务器端运行命令,如下所示:单击此处添加段落文字内容步骤五:从步骤五:从v$sessionv$session表中获取表中获取SQL_ADDRESSSQL_ADDRESS字段与字段与PREV_SQL_ADDRPREV_SQL_ADDR字段。字段。selectsid,prev_sql_addr,username
15、,statusfromv$session;如何知道该进程执行的如何知道该进程执行的SQLSQL语句语句单击此处添加段落文字内容如何知道该进程执行的如何知道该进程执行的SQLSQL语句语句步骤六:根据步骤六:根据v$sessionv$session表中查询到的表中查询到的PREV_SQL_ADDRPREV_SQL_ADDR字段,再从字段,再从v$sqlv$sql表表中中查询到如下信息查询到如下信息。selectsql_text,addressfromv$sqlwhereaddress=3091B2DC;最后就找到了那个用户从什么客户端发送什么样的语句到服务器端什么进程去处理的整个过程,从而获取。
16、单击此处添加段落文字内容跟踪语句小结跟踪语句小结-查找找sesssionselectsid,serial#,username,status,machine,osuser,program,logon_timefromv$sessionwherestatus=upper(INACTIVE)orderbylogon_timeasc;selectaddr,ses_addrfromv$transaction;selectsaddr,sid,serial#,username,statusfromv$session;selectsaddr,sid,serial#,username,status,prev_s
17、ql_addr,prev_hash_valuefromv$session;-查找活动用户客户端进程号,程序、tranactionselectsid,username,MACHINE,process,programfromv$transactiont,v$sessionswheret.ses_addr=s.saddr;selectaddr,pid,spid,programfromv$process;selectsaddr,sid,paddr,username,statusfromv$session;-根据根据sid,查找相找相应inactive sessions 对应的的sql操作操作selec
18、tsql_text,address,hash_valuefromv$sqlq,v$sessionswheres.sid=144ands.prev_sql_addr=q.address;单击此处添加段落文字内容跟踪语句小结跟踪语句小结-查看当前用户的spid:selectspidfromv$processp,v$sessionswheres.audsid=userenv(sessionid)ands.paddr=p.addr;selectspidfromv$processpjoinv$sessionsonp.addr=s.paddrands.audsid=userenv(sessionid);查
19、看当前用户的sid和serial#:selectsid,serial#,statusfromv$sessionwhereaudsid=userenv(sessionid);查看当前用户的trace file路径:selectp.value|t.instance|_ora_|ltrim(to_char(p.spid,fm99999)|.trcfromv$processp,v$sessions,v$parameterp,v$threadtwherep.addr=s.paddrands.audsid=userenv(sessionid)andp.name=user_dump_dest;单击此处添加段
20、落文字内容跟踪语句小结跟踪语句小结-已知已知spid,查看当前正在看当前正在执行或最近一次行或最近一次执行的行的语句句:select/*+ordered*/sql_textfromv$sqltextsqlwhere(sql.hash_value,sql.address)in(selectdecode(sql_hash_value,0,prev_hash_value,sql_hash_value),decode(sql_hash_value,0,prev_sql_addr,sql_address)fromv$sessionswheres.paddr=(selectaddrfromv$proces
21、spwherep.spid=to_number(&pid)orderbypieceasc;-查看看锁和等待和等待:coluser_nameformata10colownerformata10colobject_nameformata15colsidformat999999colserial#format999999colspidformata6select/*+rule*/lpad(,decode(l.xidusn,0,3,0)|l.oracle_usernameuser_name,o.owner,o.object_name,o.object_type,s.sid,s.serial#,p.sp
22、idfromv$locked_objectl,dba_objectso,v$sessions,v$processpwherel.object_id=o.object_idandl.session_id=s.sidands.paddr=p.addrorderbyo.object_id,xidusndesc;目 录TABLE OF CONTENTS三、Oracle“SQL Tarce”工具用法一、数据库连接体系介绍二、SQL 跟踪原理解析四、Oracle“TKPROF”工具用法五、Q&A单击此处添加段落文字内容Oracle Oracle“SQL TraceSQL Trace”介绍介绍SQL_TRA
23、CE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法。利用Oracle的SQLTRACE实用程序可以对指定的查询、批处理进程和整个系统做时间统计。可以帮助我们彻底地找到系统中可能存在的瓶颈。SQLTRACE有如下的功能:1.SQLTRACE运行这个查询并输出一个所执行的Oracle查询(或一系列查询)的统计信息。2.SQLTRACE帮助开发人员分析查询的每个部分。用户跟踪文件包括:所有的用户发出的SQL语句的信息,包括:每条语句的执行时间和占用资源的数量。因为跟踪文件的信息是没有格式化的原始信息,所以用TK
24、PROF工具来转换信息,使其易于理解。单击此处添加段落文字内容Oracle Oracle“SQL TraceSQL Trace”介绍介绍通过SQLTrace可收集的信息包括:1.解析、执行、返回数据的次数2.cpu和执行命令的时间3.物理读和逻辑读的次数4.系统处理的记录数5.SQL查询执行计划状况需要调整的语句符合以下几点:1.CPU占用过多2.Parse,Execute,Fetch花费太多时间3.DISK读取太多,query/current(SGA)中数据块读取太少4.访问许多块,只返回2行单击此处添加段落文字内容设置跟踪参数设置跟踪参数SQL_TRACE可以作为初始化参数在全局启用,也可
25、以通过命令行方式在具体session启用。1 设置实例级跟踪参数(在全局启用)在全局启用SQL_TRACE会导致所有进程的活动被跟踪,包括后台进程及所有用户进程,这通常会导致比较严重的性能问题,所以在生产环境中要谨慎使用,这个参数在10g之后是动态参数,可以随时调整,在某些诊断中非常有效。设置init.ora中的A.TIMED_STATISTICES(用于启动或禁止对定时统计信息(如CUP时间、占用时间),以及动态性能表中多种统计信息的收集功能。)A.MAX_DUP_FILE_SIZE(若为UNLIMITED则意味着没有上限。)B.USER_DUMP_DEST(设置跟踪文件的存储位置。默认为a
26、dmin/用户/udump)设置showparameterUSER_DUMP_DESTshowparameterMAX_DUMP_FILE_SIZEshowparameterTIMED_STATISTICSshowparameterSQL_TRACEaltersessionsetMAX_DUP_FILE_SIZE/timed_statisticstrue;altersystemsetMAX_DUP_FILE_SIZE/timed_statisticsfalse;altersystemsetuser_dump_dest=newdir;altersystemsetsql_trace=true;al
27、tersystemsetsql_trace=false;单击此处添加段落文字内容设置跟踪参数设置跟踪参数2 设置跟踪参数(会话级启用)大多数时候我们使用sql_trace跟踪当前进程.通过跟踪当前进程可以发现当前操作的后台数据库递归活动(这在研究数据库新特性时尤其有效),研究SQL执行,发现后台错误等。grantselectanydictionaryto用户名;设置会话级跟踪参数如下:SQLshowparameterUSER_DUMP_DESTNAMETYPEVALUE-user_dump_deststringC:oracleadminora92udumpSQL-步骤1:设置SQL_TRACE
28、=FALSESQLshowparameterSQL_TRACENAMETYPEVALUE-sql_tracebooleanFALSESQLSQLALTERSESSIONSETSQL_TRACE=TRUE或SQLEXECUTEdbms_session.set_sql_trace(true);单击此处添加段落文字内容启动启动SQLSQL跟踪跟踪3 启动会话级的跟踪A.由于SQL_TRACE实用程序会增加系统的开销,建议用完后及时设置为FALSE。B.如果将整个实例级都进行跟踪的话,则在修改SPFILE参数sql_trace=true。这样会使系统付出更大的代价。SQLalter session s
29、et SQL_TRACE=TRUE;SQL-不用可不用可设置置为:SQLalter session set SQL_TRACE=FALSE;单击此处添加段落文字内容启动启动SQLSQL跟踪跟踪4 确定被跟踪所产生文件的名称1)先查询实例名:SQL select 会会话的数据的数据实例名例名:|name 实例名例名 from v$database;单击此处添加段落文字内容启动启动SQLSQL跟踪跟踪4 确定被跟踪所产生文件的名称2)查询自己会话的SID和SERIAL#SERIAL#:selectsubstr(a.spid,1,9)spid,substr(b.sid,1,5)sid,substr(
30、b.serial#,1,5)ser#,substr(b.machine,1,6)box,substr(b.username,1,8)username,substr(b.osuser,1,8)os_user,substr(b.program,1,30)programfromv$sessionb,v$processawhereb.paddr=a.addrandtype=USERorderbyspid;单击此处添加段落文字内容启动启动SQLSQL跟踪跟踪4 确定被跟踪所产生文件的名称3)启动会话级跟踪:SQLshowuserUSERis“SYSSQLaltersessionsetSQL_TRACE=
31、TRUE;Sessionaltered.Elapsed:00:00:00.03SQL跟踪用户名为SYS;被跟踪的文件的名字可能是:NSTC_5379.trc单击此处添加段落文字内容启动启动SQLSQL跟踪跟踪5 开始运行应用以产生跟踪文件:假设用户发出下面语句:SQLselect*fromt;SQLinsertintotvalues(10,地球人);SQLselect*fromtwhereid=10;单击此处添加段落文字内容启动启动SQLSQL跟踪跟踪6 路径找产生跟踪文件:所产生的文件为NSTC_ora_5379.trc则:设置会话级跟踪为FALSE:SQLSQLshowuserUSERis
32、“sysSQLaltersessionsetSQL_TRACE=FALSE;Sessionaltered.Elapsed:00:00:00.00单击此处添加段落文字内容跟踪其他用户进程跟踪其他用户进程在很多时候我们需要跟踪其他用户的进程,而不是当前用户,可以通过Oracle提供的系统包DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION来完成SET_SQL_TRACE_IN_SESSION过程序要提供三个参数:参数名称参数名称参数类型参数类型In/Out Default?SIDNUMBERINSERIAL#NUMBERINSQL_TRACEBOOLEANINEXECUTEd
33、bms_system.set_sql_trace_in_session(session_id,serial_id,true);单击此处添加段落文字内容1004610046事件说明事件说明10046事件是Oracle提供的内部事件,是对SQL_TRACE的增强.10046事件可以设置以下四个级别:1.1-启用标准的SQL_TRACE功能,等价于sql_trace2.4-Level1加上绑定值(bindvalues)3.8-Level1+等待事件跟踪4.12-Level1+Level4+Level8在全局设置在参数文件中增加:event=10046tracenamecontextforever,l
34、evel12此设置对所有用户的所有进程生效、包括后台进程.在会话设置SQLaltersessionsetevents10046tracenamecontextforever;SQLaltersessionsetevents10046tracenamecontextforever,level8;SQLaltersessionsetevents10046tracenamecontextoff;单击此处添加段落文字内容1004610046事件说明事件说明对其他用户session设置execdbms_system.set_ev(146,4,10046,4,n6user);设置execdbms_syst
35、em.set_ev(146,4,10046,0,n6user);停止以上前两个参数分别为sid,serial#selectsid,serial#,usernamefromv$sessionwhereusernameisnotnull;单击此处添加段落文字内容示例一示例一1.通过v$session获得sid、serial#等信息,确认要跟踪的用户SQLselectp.spid,s.sid,s.serial#,s.program,osuser,machine,PROCESS,s.username,statusfromv$sessions,v$processpwherep.addr=s.paddra
36、nds.usernameisnotnull;2.设置跟踪:SQLexecdbms_system.set_sql_trace_in_session(145,10,true)PL/SQLproceduresuccessfullycompleted.可以等候片刻,跟踪session执行任务,捕获sql操作.3.停止跟踪:SQLexecdbms_system.set_sql_trace_in_session(145,10,false)PL/SQLproceduresuccessfullycompleted.单击此处添加段落文字内容示例二示例二如何跟踪某应用下发生的sql操作细节1.找出应用的sid和s
37、erial#selectsid,serial#,usernamefromv$sessionwherelower(program)like%sqlplus%;2.开始跟踪SQLexecdbms_system.set_sql_trace_in_session(148,57,true)期间做点关于这个应用的操作(保证和数据库能有交互)单击此处添加段落文字内容示例二示例二3、停止跟踪,在user_dump_dest目录下会生成跟踪的trace文件SQLexecdbms_system.set_sql_trace_in_session(148,57,false)4、找出并进入user_dump_dest目
38、录,最后生成那个文件就是要用的trace文件SQLsetlines1024SQLshowparameteruser_dump_dest单击此处添加段落文字内容示例二示例二5、使用tkprof格式化trace文件,sys=no的意思是不查看sys用户的操作$tkproforcl_ora_24884.trcreport.txtsys=no6、查看格式化后的文件report.txt,里头就有跟踪期间发生的所有存储过程(存储过程中执行的sql操作也会逐条显示)和sql操作,还有各sql执行的统计数据,可以了解哪些sql快,哪些慢。跟踪完毕。目 录TABLE OF CONTENTS四、Oracle“TK
39、PROF”工具用法一、数据库连接体系介绍二、SQL 跟踪原理解析三、Oracle“SQL Tarce”工具用法五、Q&A单击此处添加段落文字内容TKPROF TKPROF 介绍介绍Tkprof是一个用于分析Oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是通过跟踪用户的会话并且使用Tkprof工具使用排序功能格式化输出,从而找出有问题的SQL语句:系统对SQL语句进行跟踪后,在产生USER_DUMP_DEST路径产生了.TRC文件确定结束跟踪后,可用TKPROF实用程序进行分析;TKPROF将跟踪文件作为输入文件,在经过格式化后
40、产生输出文件;由于跟踪文件是一系列的文件,在使用TKPROF时可以对单个文件进行格式化,也可以将所有的跟踪文件串在一起在进行格式化;逐一对单个文件进行TKPROF,分别产生相应的输出文件;单击此处添加段落文字内容TKPROF TKPROF 作用作用标记需要调整的语句使用TKPROF格式化的文件很容易看出需要调整的SQL语句。查找的依据是:1.*耗费大量的CPU资源2.*花费较长的时间进行SQL分析、执行和获取3.*从磁盘读大量的数据块,而从SGA区读的数据很少4.*访问大量的数据块但只返回一点数据一旦找到这些语句就可以用执行计划工具来进一步决定为什么这些语句性能这么低了。单击此处添加段落文字内
41、容TKPROFTKPROF工具介绍工具介绍TKPROF 命令语法:附加参数:filename1指定的输入文件,可以是多个文件联起来。Filename2格式化输出文件。SORT在输出文件前先排序。如果省去则按照实际使用的顺序输出到文件中。排序选项有以下多种:PRSCNT语句解析的数目PRSCPU语句解析所占用的CPU时间PRSELA语句解析所占用的时间PRSDSK语句解析期间,从磁盘进行物理读的数目TKPROF filename1,filename2 SORT =opion,option PRINT=integer AGGREGATE =YES|NO INSERT=filename3 SYS=Y
42、ES|NO TABLE=schema.table|EXPLAIN=user/password RECORD=filename 单击此处添加段落文字内容TKPROFTKPROF工具介绍工具介绍附加参数用于指定期望的信息。这些选项如下所示:1.EXPLAN为跟踪文件中的每条语句生成一个执行计划。产生的结果保存在指定模式的PLAN_TABLE中,该模式在命令中给出,即命令中必须要给出用户名和口令。2.TABLE指定执行计划保存的表名称,替换缺省的PLAN_TABLE表名。3.SYS表明是否格式化的文件包括递归的SQL语句。4.SORT表明格式化的文件信息排序的规则。5.RECORD指定跟踪文件中的S
43、QL语句写入哪一个文件。使你能将SQL语句与附加的资源使用信息分开。6.PRINT指定格式化的跟踪文件最多可以写入的SQL语句的数量。7.INSERT执行时创建一个脚本,用于生成一个TKPROF_TABLE表。8.AGGREGATE决定是否将多个执行相同语句分析的结果合并。单击此处添加段落文字内容格式后信息内容解析格式后信息内容解析表式统计信息1.PARSE将把SQL语句转化为执行规划,其中包括对安全授权的检查,以及对存在表、列和其他访问对象进行检查。2.EXECUTE由ORACLE进行语句执行。对于INSERT、UPDATE、DELETE的语句,将对数据进行修改;对于SELECT语句,将对所
44、选行进行确定。3.FETCH将检查出查询的返回行,只有SELECT语句能够执行取数据的操作。单击此处添加段落文字内容格式后信息内容解析格式后信息内容解析表统计信息:1.COUNT:语句解析、执行或取数据等执行的数据库调用数量;2.CPU某条语句进行解析、执行和取数据等数据库调用所占用地时间,单位为秒;3.ELAPSED某条语句进行解析、执行和取数据等处理数据库调用花费的总的时间,单位为秒;4.DISK对于所有语句解析、执行和取数据等调用,从磁盘数据文件中物理读取的数据块数目;注意:这不是物理I/O操作的数量,如果这个值大于逻辑读的数量(diskquery+current),这意味着数据块填充进
45、了临时表空间;5.QHERY以一致模式从高速缓存逻辑读取的块数量。通常,这类型的逻辑读用作查询。6.CURRENT在当前模式下从高速缓存逻辑读取的块数量。这类逻辑读被INSERT、DELETE、UPDATE等语句所使用。7.ROWSSQL语句所处理行的总数目,它并不包括SQL语句的子查询所处理的行数。对于INSERT、DELETE、MERGE以及UPDATE等语句来说,这是所影响的行数量。单击此处添加段落文字内容格式后信息内容解析格式后信息内容解析单击此处添加段落文字内容格式后信息内容解析格式后信息内容解析对于每个行源操作来说,提供如下的运行时统计:1.cr是一致性模式下逻辑读出的数据块数。2
46、.pr是从磁盘物理读出的数据块数。3.pw是物理写入磁盘的数据块数。4.time是以微秒表示的总的消逝时间。注意根据统计得到的值不总是精确的。实际上,为了减少开销,可能用了采样。5.cost是操作的评估开销。这个值只有在Oracle11g才提供。6.size是操作返回的预估数据量(字节数)。这个值只有在Oracle11g才提供。7.card是操作返回的预估行数。这个值只有在Oracle11g才提供。单击此处添加段落文字内容格式后信息内容解析格式后信息内容解析输出文件的结尾给出了所有关于跟踪文件的信息:1.跟踪文件名称、版本号、用于这个分析所使用的参数sort的值。2.所有会话数量与SQL语句数
47、量。3.显示组成跟踪文件的行数4.所有SQL语句用去的时间(毫秒)。注意:知道整个跟踪文件消耗了多少时间是很关键单击此处添加段落文字内容案例解析案例解析例1:$tkprofora_1234.trctrace.txtsys=noexplain=scott/111111该命令将忽略原始文件中的递归SQL;在格式化的跟踪文件中包括每条SQL语句的执行计划PLAN_TABLE依赖于用户JOE模式。例2:$tkprofora_1234.trctrace.txtprint=10record=sql.txt该命令将翻译跟踪文件ora_1234.trc并保存头10条SQL语句到输出文件sql.txt,用于保存
48、原始跟踪文件的头10条SQL语句。例3:$tkprofora_1234.trctrace.txtinsert=trace.sqlsort=fchrow该命令将翻译跟踪文件ora_1234.trc并保存到输出文件trace.txt;创建第二个文件trace.sql,用于保存生成TKPORF_TABLE表的SQL命令。如果没有排序参数fchrow,TKPROF将会按照执行的顺序输出到trace.txt文件中去。例4:tkprofnstc_ora_4408.trc2.txtAGGREGATE=no合并执行相同的结果单击此处添加段落文字内容解读与分析格式化文件(示例一)解读与分析格式化文件(示例一)被
49、TKPROF分析的格式化文件,如下所示:单击此处添加段落文字内容解读与分析格式化文件解读与分析格式化文件(示例一)(示例一)分析:1.跟踪文件中发现,第三条语句被分析了一次,执行了五次,并执行了250次获取操作。2.这个过程耗费了CPU0.18秒的时间,整个语句执行花费了0.20秒的时间。它需要从磁盘读取54个数据块,从SGA读取266个数据块并返回245行数据3.在最后一行显示所有统计信息。单击此处添加段落文字内容格式后信息内容解析二格式后信息内容解析二执行计划执行统计行源操作单击此处添加段落文字内容解读与分析格式化文件解读与分析格式化文件(示例二)(示例二)分析:在本例中,表sales有9
50、18843行而根据跟踪文件仅返回540318行,这表示WHERE条件过滤了大约41%的行。此后的GROUPBY进一步减少结果到16348行。单击此处添加段落文字内容解读与分析格式化文件解读与分析格式化文件用编辑器打开,如(下面语句1):selectu.name,o.namefromobj$o,user$u,trigger$twheret.baseobject=:1andt.obj#=o.obj#ando.owner#=u.user#orderbyo.obj#callcountcpuelapseddiskquerycurrentrows-parse10.010.010000execute10.0