tkprof 使用

TKPROF使用步骤
1.设置参数文件
设置三个参数timed_staticstices user_dump_dest max_dump_file_size
timed_staticstices 用于启动或禁止对定时统计信息(如CUP时间、占用时间),以及动态性能表中多种统计信息的收集功能
alter session set timed_statistics true;
alter system set timed_statistics false;

MAX_DUP_FILE_SIZE 当实例层启用SQL TRACE的时候,在每次请求服务器的时候,都将在跟踪文件中产生一个文本行,这些文件的最大尺寸受限于初始化参数的设置。默认为500(blocks)。若里面的数据被截断则增大SIZE。若为UNLIMITED则意味着没有上限。
USER_DUMP_DEST 设置跟踪文件的存储位置。默认为admin/用户/udump;
alter system set user_dump_dest=newdir

2.启动SQL TRACE实用工具
对会话启动SQL TRACE
alter session set sql_trace=true;
alter session set sql_trace=false;
SYS.DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION=( SID ,SERIAL# ,TRUE );

SID,SERIAL#可以从V$SESSION视图获得。
ALTER SESSION SET EVENTS
alter session set events '10046 trace name context forever,level';
alter session set events '10046 trace name context off';
alter system set events '10046 trace name context forever,level 1'
alter system set events '10046 trace name context off'

n=1---------激活标准SQL_TRACE工具,这与设置SQL_TRACE=TRUE 没有任何不同;
n=4---------激活标准SQL_TRACE,且可以扑获跟踪文件中的绑定变量。
n=8---------激活标准SQL_TRACE,且可在查询级上扑获跟踪文件中的待事件。
n=12--------激活标准SQL_TRACE,并包括扑获绑定变量与等待事件。
对用户实例启动 SQL TRACE
alter system set sql_trace=true;
alter system set sql_trace=false;

3.使用tkprof格式化trace文件
Usage: tkprof tracefile outputfile [explain= ] [table= ] [print= ] [insert= ] [sys= ] [sort= ]
输入文件 格式化后的输出文件
table=schema.tablename Use 'schema.tablename' with 'explain=' option.
用于指定在将执行规划写进输出文件之前,TKPROF用于临时存放执行规划所用表的架构和名称
explain=user/password Connect to ORACLE and issue EXPLAIN PLAN.
print=integer List only the first 'integer' SQL statements. 只列出输出文件中的第一个INTEGER的SQL语句,若忽略,则TKPROF将列出所有跟踪的SQL语句
aggregate=yes|no 若用户指定AGGREGATE=NO,TKPROF将不会对相同SQL文本的多个用户进行汇总
insert=filename List SQL statements and data inside INSERT statements. SQL脚本的一种,用于将跟踪文件的动机信息存储到数据库中
sys=no TKPROF does not list SQL statements run as user SYS. 于启动或禁止将用户SYS所发布的SQL语句列表到输出文件之中,也包括递归SQL(为执行用户的SQL语句,ORACLE还必须执行一些附加语句)语句在内。默认为YES
record=filename Record non-recursive statements found in the trace file. 对于跟踪文件中的所用非递归SQL语句,TKPROF 将以指定的名称来创建某个SQL脚本。用于对跟踪文件中的用户时间进行重放
waits=yes|no Record summary for any wait events found in the trace file.
sort=option Set of zero or more of the following sort options: 在将被跟踪的SQL语句列表输出到跟踪文件之前,先将其按照指定排序选项的降序关系对其进行排序;若指定了多种排序选项,那么根据排序选项所指定值的和的降序关系对其进行排序;若忽略此参数,那么TKPROF将按照使用次序把语句列表到输出文件中
prscnt number of times parse was called 语句解析的数目
prscpu cpu time parsing 语句解析所占用的CPU时间
prsela elapsed time parsing 语句解析所占用的时间(总是大于或等于CPU时间);
prsdsk number of disk reads during parse 语句解析期间,从磁盘进行物理读取的数目
prsqry number of buffers for consistent read during parse 语句解析期间,一致模式块读取(CONSISTENT MODE BLOCK READ)的数目
prscu number of buffers for current read during parse 语句解析期间,当前模式读取(CURRENT MODE BLOCK READ)的数目
prsmis number of misses in library cache during parse 语句解析期间,库缓存失败的数目

execnt number of execute was called 语句执行的数目
execpu cpu time spent executing 语句执行所占用的CPU时间
exeela elapsed time executing 语句执行所占用的时间(总是大于或等于CPU时间)
exedsk number of disk reads during execute 语句执行期间,从磁盘进行物理读取的数目
exeqry number of buffers for consistent read during execute 语句执行期间,一致模式块读取(CONSISTENT MODE BLOCK READ)的数目
execu number of buffers for current read during execute 语句执行期间,当前模式读取(CURRENT MODE BLOCK READ)的数目
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 取数据所占用的CPU时间
fchela elapsed time fetching 取数据所占用的时间(总是大于或等于CPU时间)
fchdsk number of disk reads during fetch 取数据期间,从磁盘进行物理读取的数目
fchqry number of buffers for consistent read during fetch 取数据期间,一致模式块读取(CONSISTENT MODE BLOCK READ)的数目
fchcu number of buffers for current read during fetch 取数据期间,当前模式读取(CURRENT MODE BLOCK READ)的数目
fchrow number of rows fetched 所获取的行数
userid userid of user that parsed the cursor

4.tkprof文件的阅读

CALL:每次SQL语句的处理都分成三个部分
Parse:这步将SQL语句转换成执行计划,包括检查是否有正确的授权和所需要用到的表、列以及其他引用到的对象是否存在。
Execute:这步是真正的由Oracle来执行语句。对于insert、update、delete操作,这步会修改数据,对于select操作,这步就只是确定选择的记录。
Fetch:返回查询语句中所获得的记录,这步只有select语句会被执行。
COUNT:这个语句被parse、execute、fetch的次数。
CPU:这个语句对于所有的parse、execute、fetch所消耗的cpu的时间,以秒为单位。
ELAPSED:这个语句所有消耗在parse、execute、fetch的总的时间。
DISK:从磁盘上的数据文件中物理读取的块的数量。一般来说更想知道的是正在从缓存中读取的数据而不是从磁盘上读取的数据。
QUERY:在一致性读模式下,所有parse、execute、fetch所获得的buffer的数量。一致性模式的buffer是用于给一个长时间运行的事务提供一个一致性读的快照,缓存实际上在头部存储了状态。
CURRENT:在current模式下所获得的buffer的数量。一般在current模式下执行insert、update、delete操作都会获取buffer。在current模式下如果在高速缓存区发现有新的缓存足够给当前的事务使用,则这些buffer都会被读入了缓存区中。
ROWS: 所有SQL语句返回的记录数目,但是不包括子查询中返回的记录数目。对于select语句,返回记录是在fetch这步,对于insert、update、delete操作,返回记录则是在execute这步。

Tkprof的使用步骤基本上遵循以下几步:
1. 在数据库级别上设置TIMED_STATISTICS为True。
8i数据库需要修改init文件增加TIMED_STATISTICS=true,然后重启数据库使其生效。
9i数据库可以直接修改:
SQL> alter system set timed_statistics=false scope=both;
如果要在PL/SQL中对session级别上设置trace,可以使用dbms_session这个包:
SQL>exec dbms_system.set_sql_trace_in_session(sid,serial#,true);
3. 找到生成的正确的trace文件,在init.ora初始化参数文件中 user_dump_dest定义的路径下可以找到。
4 对trace文件使用tkprof工具进行分析。
tkprof tracefile outfile [explain=user/password] [options...]
一般来说,使用tkprof得到的输出文件中包含三个部分:
SQL语句本身。
相关的诊断信息,包括cpu时间、总共消耗的时间、读取磁盘数量、逻辑读的数量、以及查询中返回的记录数目。
列出这个语句的执行计划。

========================================================================================================================
举例:
1.列出前2条sql语句的执行情况:
C:\>tkprof c:\oc_ora_2892.trc c:\cc.txt print=2
2.将数据保存到数据库:
C:\>tkprof c:\oc_ora_2892.trc c:\cc.txt insert=c:\insert.sql
执行后会在c:\产生insert.sql文件,执行该文件即可将数据保存到数据库
3.提取sql执行语句:
C:\>tkprof c:\oc_ora_2892.trc c:\cc.txt record=sqlstr.sql
sqlstr.sql中的内容:
alter session set sql_trace=true ;
alter session set events '10046 trace name context forever,level 12';
select * from tblinventoryhistory ;
select * from tblorder ;
select * from tblproduct ;
select * from tbluser ;
select * from tblroute ;
4.产生执行计划:
C:\>tkprof c:\oc_ora_2892.trc c:\ff.txt explain=ocuser/ocuser table=ocuser.test1
在产生的ff.txt文件中会体现其执行计划:
Rows Execution Plan
——- —————————————————
0 SELECT STATEMENT GOAL: CHOOSE
0 TABLE ACCESS (FULL) OF 'TBLROUTE'

小技巧:
 1.如何查找你产生的trace文件:
可用eygle写的脚本去查找:
SQL> select d.value || '\' || lower(rtrim(i.instance, chr(0))) || '_ora_' ||
  2         p.spid || '.trc' trace_file_name
  3    from (select p.spid
  4            from sys.v$mystat m, sys.v$session s, sys.v$process p
  5           where m.statistic# = 1
  6             and s.sid = m.sid
  7             and p.addr = s.paddr) p,
  8         (select t.instance
  9            from sys.v$thread t, sys.v$parameter v
 10           where v.name = 'thread'
 11             and (v.value = 0 or t.thread# = to_number(v.value))) i,
 12         (select value from sys.v$parameter where name = 'user_dump_dest') d; 
TRACE_FILE_NAME
——————————————————————————–
/opt/oracle/admin/hsjf/udump/hsjf_ora_1026.trc
 
2.sort选项可同时用多个,做法是用括号括起来,中间用逗号分割:
C:\>tkprof c:\oc_ora_2892.trc c:\cc.txt sort=(prsela, exeela, fchela)

注意:最后排序是按照各个选项的数字之和进行排序,类似于order by (sort1+sort2+sort3),而不是order by sort1,sort2,sort3
 


 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15242702/viewspace-666010/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15242702/viewspace-666010/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值