Tkprof工具介绍和分析
Tkprof是一个用于分析oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。
如果一个系统的执行效率比较低,一个比较好的方法是通过跟踪用户的会话并且使用Tkprof工具使用排序功能格式化输出,从而找出有问题的SQL语句。
Tkprof的使用步骤
1, 在数据库级别上设置Timed_statistics为true。
8i数据库需要修改init文件增加timed_statistics=true,然后重启数据库使其有效。
9i数据库可以在sqlplus中完成修改
SQL> alter system set timed_statistics= true scope =both;
2, 使用各种功能得到你想要查看session的trace文件
Oracle中能够得到一个session的trace的方法很多,这里简单介绍一下。
方法一:如果需要在数据库级别上设置trace,可以在init.ora文件中加入sql_trace=true,这样在数据库运行的同时会trace所有数据库的活动,一般来说,只有在数据库的所有事务都需要被监控的时候才使用这种方法,使用这种方法会产生大量的trace文件,并且会耗费大量的数据库性能,不推荐使用。如果一定要用,则在trace信息收集完成后,记得去掉这个参数,然后重启数据库。
方法二:如果需要在session级别上设置trace,可以在sqlplus中使用下列语句:
SQL>alter session set sql_trace=true
或者使用10046跟踪事件。
SQL>alter session set events ’ 10046 trace name context forever,level 1’ ;
另外我们还可以使用dbms_session程序包完成同样的操作。
SQL>exec dbms_system.set_sql_trace_in_session(SID,Serial#,true);
3、找到生成的正确的trace文件,在init.ora初始化参数中,user_dump_dest定义的路径就是。我们也可以使用下述语句得到这个参数的设置。
SQL> show parameter user_dump_dest
4、对trace文件使用tkprof工具进行分析。
C:/> tkprof tracefile outfile [explain=user/password][options…]
一般来说,使用tkprof得到的输出文件包括三个部分:
ü SQL语句本身。
ü 相关的诊断信息,包括CPU时间、总共消耗事件、读取磁盘数量、逻辑读数量、以及查询中返回的记录数目。
ü 列出这个语句的执行计划。
下面用一个具体的例子来说明如何利用tkprof来分析trace文件。
首先,从os上利用top命令找到当前占用cpu资源最高的一个进程的PID号:14483
load averages: 1.53, 1.37, 1.39 db2 23:11:15
246 processes: 236 sleeping, 1 running, 2 zombie, 4 stopped, 3 on cpu
CPU states: 68.0% idle, 17.3% user, 3.0% kernel, 11.6% iowait, 0.0% swap
Memory: 16.0G real, 3.4G free, 9.7G swap in use, 11.0G swap free
PID USERNAME THR PR NCE SIZE RES STATE TIME FLTS CPU COMMAND
14483 oracle 1 51 0 8.8G 8.8G sleep 77.1H 1 5.69% oracle
28222 oracle 1 52 0 8.8G 8.8G cpu18 93:55 2742 3.32% oracle
3722 oracle 1 59 0 8.8G 8.8G sleep 157:41 0 0.45% oracle
16077 oracle 1 59 0 8.8G 8.8G sleep 17.1H 0 0.34% oracle
然后,在数据库中根据PID号找相应的SID号和serial#:
Select s.sid,s.serial# from v$session s, v$process p
Where s.paddr = p.addr and p.spid = ‘ 14483’ ;
第三步,使用dbms_system.set_sql_trace_in_session包来对这个session进行trace;
第四步,到user_dump_dest定义的路径下查找刚刚最近生成的trace文件,根据时间排序,找最近的trace文件,然后使用tkprof工具对此trace文件进行格式化分析,生成分析后的报告文件。