Trace file(追踪文件)是以trc为后续的文本文件,它记录了各种sql操作及所消耗的时间等,根据trace文件我们就可以了解哪些sql导致了系统的性能瓶颈,进而采取恰当的方式调优。
当我们操作oracle数据库,每次都会产生一个会话(session),session中记录了所有操作,这些操作都会记录在trace文件中。
如何使用TKPROF命令查看Trace file:
SQL>alter session set sql_trace=true;
SQL>select count(*) from all_objects;
COUNT(*)
----------
49880
SQL>select a.spid from v$process a,v$session b where a.addr=b.paddr and b.audsid=userenv(‘sessionid‘); -----查询当前会话spid号为13052
SPID
----------
13052
SQL>SELECT VALUE FROM V$PARAMETER WHERE NAME = ‘user_dump_dest‘ ;--查看trace文件默认路径
VALUE
----------
F:\ORACLE\PRODUCT\10.2.0\DB_1\ADMIN\ORCL\UDUMP
可以在该路径下看到新生产的文件 orcl_ora_13052.trc ,不过这个trace 文件不易于阅读,通过TKPROF命令转换为易读的文件
需要在命令窗口中执行,cmd打开命令窗口:
c:\>tkprof F:\oracle\product\10.2.0\db_1\admin\orcl\udump\orcl_ora_13052.trc output=F:\orcl_trc_13052.txt;
打开该文件可以看到如下信息:
COUNT:这个语句被parse、execute、fetch的次数。
CPU:这个语句对于所有的parse、execute、fetch所消耗的cpu的时间,以秒为单位。
ELAPSED:这个语句所有消耗在parse、execute、fetch的总的时间。
DISK:执行物理I/O次数,从磁盘上的数据文件中物理读取的块的数量。一般来说更想知道的是正在从缓存中读取的数据而不是从磁盘上读取的数据。
QUERY:在意一致性检索方式获得块时,执行逻辑I/O次数;在一致性读模式下,所有parse、execute、fetch所获得的buffer的数量。一致性模式的buffer是用于给一个 长 时间运行的事务提供一个一致性读的快照,缓存实际上在头部存储了状态。
CURRENT:逻辑I/O次数,在current模式下所获得的buffer的数量。一般在current模式下执行insert、update、delete操作都会获取buffer。在current模式下如果在高速缓存区发现有新的缓存足够给当前的事务使用,则这些buffer都会被读入了缓存区中。
ROWS: 此阶段,被处理或受影响的行数,所有SQL语句返回的记录数目,但是不包括子查询中返回的记录数目。对于select语句,返回记录是在fetch这步,对于insert、update、delete操作,返回记录则是在execute这步。