TKPROF的使用简介

简介: 自己摸索了一个中午,分享给大家,其中关于tkprof的简介为摘录。Tkprof是一个用于分析Oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是通过跟踪用户的会话并且使用Tkprof工具使用排序功能格式化输出,从而找出有问题的SQL语句。

自己摸索了一个中午,分享给大家,其中关于tkprof的简介为摘录。
Tkprof是一个用于分析Oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是通过跟踪用户的会话并且使用Tkprof工具使用排序功能格式化输出,从而找出有问题的SQL语句。
TKPROF 命令语法:
TKPROF  filename1, filename2 [ SORT  = [ opion][,option] ]
  [  PRINT = integer ]
  [ AGGREGATE  = [ YES | NO ] ]
  [ INSERT = filename3 ]
  [ SYS = [ YES | NO ]  ]
  [  [ TABLE = schema.table ] | [ EXPLAIN = user/password ]  ]
  [  RECORD = filename ]
filename1  指定的输入文件,可以是多个文件联起来。
Filename2  格式化输出文件。
SORT     在输出到输出文件前,先进程排序。如果省去,则按照实际使用的顺序输出到文件中。排序选项有以下多种:
  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
PRINT        只列出输出文件的第一个integer 的SQL语句。默认为所有的SQL语句。
AGGREGATE    如果= NO ,则不对多个相同的SQL进行汇总。
INSERT       SQL 语句的一种,用于将跟踪文件的统计信息存储到数据库中。在TKPROF创建脚本后,在将结果输入到数据库中。
SYS         禁止或启用 将SYS用户所发布的SQL语句列表到输出文件中。
TABLE       在输出到输出文件前,用于存放临时表的用户名和表名。
EXPLAIN     对每条SQL 语句确定其执行规划。并将执行规划写到输出文件中。
其中比较有用的一个排序选项是fchela,即按照elapsed time fetching来对分析的结果排序(记住要设置初始化参数timed_statistics=true),生成的文件将把最消耗时间的sql放在最前面显示。另外一个有用的参数就是sys,这个参数设置为no可以阻止所有以sys用户执行的sql被显示出来,这样可以减少分析出来的文件的复杂度,便于查看。
对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,可以在会话级别,也可以在实例级别。
会话级:
SQL> alter session set timed_statistics=True;
实例级:
SQL> alter system set timed_statistics=True scope=both;
2、 设置SQL_TRACE,可以在会话级,也可以在数据库级。
会话级:
SQL> alter session set sql_trace=true;
或者:
SQL>EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(SID,SERIAL#,TRUE);
实例级:
SQL> alter system set sql_trace=true scope=both;
下面两个例子说明一下具体的用法:


SQL> create table testlib  as select object_name noindex,object_name idx from dba_objects;

表已创建。

SQL> alter session set sql_trace=true;

会话已更改。

SQL> select count(*) from testlib;

  COUNT(*)                                                                    
----------                                                                    
     69304                                                                    

SQL> select count(*) from testlib;

  COUNT(*)                                                                    
----------                                                                    
     69304                                                                    

SQL> select count(*) from testlib;

  COUNT(*)                                                                    
----------                                                                    
     69304                                                                    

SQL> alter session set timed_statistics=true;

会话已更改。

SQL> select count(*) from testlib;

  COUNT(*)                                                                    
----------                                                                    
     69304                                                                    

SQL> alter session set sql_trace= false;

会话已更改。

SQL> select username,sid,serial# from v$session where username='system';

//此sql语句未执行。

SQL> select username,sid,serial# from v$session where username='system';
USERNAME                              SID    SERIAL#
------------------------------ ---------- ----------
GDSBDW                                 37      27544
SQL> select 'dss_ora_'||spid||'.trc' from v$process where addr = (select paddr f
rom v$session where sid=37);
'DSS_ORA_'||SPID||'.TRC'
------------------------
orcl_ora_3040.trc

也可以用下面的sql语句获得trace文件的所在位置

 SQL>  select
  2  d.value||'/'||lower(rtrim(i.instance,chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name
  3  from
  4  (select p.spid
  5  from sys.v$mystat m, sys.v$session s,sys.v$process p
  6  where m.statistic#=1 and s.sid=m.sid and p.addr=s.paddr) p,
  7  (select
  8  t.instance from sys.v$thread t,sys.v$parameter v
  9  where v.name ='thread' and (v.value =0 or t.thread#= to_number(v.value))) i,
 10* (select value from sys.v$parameter where name ='user_dump_dest') d


TRACE_FILE_NAME                                                               
--------------------------------------------------------------------------------
f:\app\administrator\diag\rdbms\orcl\orcl\trace/orcl_ora_3040.trc

          
--使用tkprof分析trace文件
C:\Documents and Settings\Administrator>tkprof  f:\app\administrator\diag\rdbms\orcl\orcl\trace/orcl_ora_4020.trc   f:\4020.trc.txt  aggregate=yes sys=no waits=yes sort=fchela
--tkprocf输出了以下文件:f:\4020.trc.txt

TKPROF: Release 11.1.0.6.0 - Production on 星期一 3月 29 13:50:42 2010

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

Trace file: f:\4020.trc
Sort options: fchela
********************************************************************************
count    = number of times OCI procedure was executed
cpu      = cpu time in seconds executing
elapsed  = elapsed time in seconds executing
disk     = number of physical reads of buffers from disk
query    = number of buffers gotten for consistent read
current  = number of buffers gotten in current mode (usually for update)
rows     = number of rows processed by the fetch or execute call

 

********************************************************************************

OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        6      0.01    5403.67          0          1          0           0
Execute      7      0.00       0.00          0          0          0           0
Fetch        8      0.03       0.07        137       2080          0           4
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total       21      0.04    5403.75        137       2081          0           4

Misses in library cache during parse: 2
Misses in library cache during execute: 1


OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        2      0.00       0.05          0          0          0           0
Execute      2      0.00       0.01          0          0          0           0
Fetch        2      0.00       0.08        379         67          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        6      0.00       0.15        379         67          0           1

Misses in library cache during parse: 2
Misses in library cache during execute: 1

    7  user  SQL statements in session.
    2  internal SQL statements in session.
    9  SQL statements in session.
********************************************************************************
Trace file: f:\4020.trc
Trace file compatibility: 11.01.00
Sort options: fchela
       1  session in tracefile.
       7  user  SQL statements in trace file.
       2  internal SQL statements in trace file.
       9  SQL statements in trace file.
       6  unique SQL statements in trace file.
     107  lines in trace file.
     124  elapsed seconds in trace file.

 

 

目录
相关文章
解决 Vant中 输入框(Field)组件获取不到输入值
解决 Vant中 输入框(Field)组件获取不到输入值
2351 0
解决 Vant中 输入框(Field)组件获取不到输入值
|
druid Java
一次 Druid 连接池泄露引发的血案!
www.javastack.cn 优秀的Java技术公众号
一次 Druid 连接池泄露引发的血案!
|
8月前
|
消息中间件 搜索推荐 调度
RocketMQ实战—8.营销系统业务和方案介绍
本文详细介绍了电商营销系统的业务流程、技术架构及挑战解决方案。涵盖核心交易与支付后履约流程,优惠券和促销活动的发券、领券、用券、销券机制,以及会员与推送的数据库设计。技术架构基于Nacos服务注册中心、Dubbo RPC框架、RocketMQ消息中间件和XXLJob分布式调度工具,实现系统间高效通信与任务管理。针对千万级用户量下的推送和发券场景,提出异步化、分片处理与惰性发券等优化方案,解决高并发压力。同时,通过RocketMQ实现系统解耦,提升扩展性,并利用XXLJob完成爆款商品推荐的分布式调度推送。整体设计确保系统在大规模用户场景下的性能与稳定性。
RocketMQ实战—8.营销系统业务和方案介绍
|
网络协议 Linux
nmcli命令详解
【4月更文挑战第9天】`nmcli`是Red Hat 7及CentOS 7后的网络管理命令,用于配置网卡并持久化设置。它可以显示网络连接信息(如`connection show`、`dev status`),控制网卡状态(启用、停用、删除连接),以及修改配置(如IP地址、DNS)。其他功能包括检查NetworkManager状态、开关网络连接和查看系统网络状态。要了解全部详情和高级用法,建议查阅相关文档。
1503 1
|
9月前
|
监控 安全 网络协议
Hyper V上网实战:多虚拟机网络环境配置
在Hyper-V环境中配置多虚拟机网络以实现上网功能,需完成以下步骤:1. 确认Hyper-V安装与物理网络连接正常;2. 配置虚拟交换机(外部、内部或专用)以支持不同网络需求;3. 设置虚拟机网络适配器并关联对应虚拟交换机;4. 验证虚拟机网络连接状态;5. 根据场景需求优化多虚拟机网络环境。此外,还需注意网络隔离、性能监控及数据备份等事项,确保网络安全稳定运行。
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
354 6
|
存储 安全 UED
插上U盘后提示格式化怎么解决?4个方法帮你
在使用u盘的时候,很多人都可能遇到过电脑插入U盘后系统弹出提示要求将U盘格式化。面对这个问题,如果U盘里有重要的数据,会让人感到不知所措。今天的内容就和大家一起讨论一下这个问题的原因和解决方法,并提供恢复U盘数据的方法。
|
传感器 数据采集 存储
LabVIEW飞机发动机测试与故障诊断系统
LabVIEW飞机发动机测试与故障诊断系统
592 2
|
存储 JSON C++
Qt cmake 增加qml文件:深度剖析Qt cmake 的qt_add_qml_module函数
Qt cmake 增加qml文件:深度剖析Qt cmake 的qt_add_qml_module函数
661 0
|
存储 开发框架 Linux
DPDK学习之DPDK边界
DPDK学习之DPDK边界
395 0