TKPROF可以把Trace源文件转换为更易读的形式。
eg: tkprof d:\a.trc d:\a.trc.log sys=no sort=fchela
Usage: tkprof tracefile outputfile [explain= ] [table= ]
[print= ] [insert= ] [sys= ] [sort= ]
tracefile | 要分析的trace文件 |
outputfile | 格式化后的文件 |
table=schema.tablename | 表名,仅在解释执行计划时使用 |
explain=apps/apps@dev3 | 解释执行计划时需要登录oracle |
print=n | 只列出最初n个sql执行语句 |
aggregate=yes|no | 是否将相同sql语句的执行信息合计起来,默认为yes |
insert=filename | 会产生一个sql文件,运行此文件可将收集到的数据insert到数据库表中 |
sys=no | 过滤掉由sys执行的语句 |
record=filename | 可将非嵌套执行的sql语句过滤到指定的文件中去 |
waits=yes|no | 是否统计任何等待事件,默认yes |
sort=option | 设置排序选项: |
sort=option 设置排序选项:
prscnt number of times parse was called
prscpu cpu time parsing
prsela elapsed time parsing
prsdsk number of disk reads during parse
prsqry number of buffers for consistent read during parse
prscu number of buffers for current read during parse
prsmis number of misses in library cache during parse
execnt number of execute was called
execpu cpu time spent executing
exeela elapsed time executing
exedsk number of disk reads during execute
exeqry number of buffers for consistent read during execute
execu number of buffers for current read during execute
exerow number of rows processed during execute
exemis number of library cache misses during execute
fchcnt number of times fetch was called
fchcpu cpu time spent fetching
fchela elapsed time fetching
fchdsk number of disk reads during fetch
fchqry number of buffers for consistent read during fetch
fchcu number of buffers for current read during fetch
fchrow number of rows fetched
userid userid of user that parsed the cursor
解析结果中的字段含义:
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这步。
CALL:每次SQL语句的处理都分成以下三个部分
Parse:这步将SQL语句转换成执行计划,包括检查是否有正确的授权和所需要用到的表、列以及其他引用到的对象是否存在。
Execute:这步是真正的由Oracle来执行语句。对于insert、update、delete操作,这步会修改数据,对于select操作,这步就只是确定选择的记录。
Fetch:返回查询语句中所获得的记录,这步只有select语句会被执行。