热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

oracle工具:tkprof简析

oracle工具:tkprof简析1定义用于分析oracle跟踪文件并且可按需产生一个更加清晰合理的输出结果的可执行工具2首选项[sql]F:\>tkprofwww.2cto.comUsage:tkproftracefileoutputfil...SyntaxHighlig

oracle工具:tkprof简析
 
  1 定义
          用于分析oracle跟踪文件并且可按需产生一个更加清晰合理的输出结果的可执行工具
    2 首选项
[sql] 
F:\>tkprof    www.2cto.com  
Usage: tkprof tracefile outputfile [explain= ] [table= ]  
              [print= ] [insert= ] [sys= ] [sort= ]  
  table=schema.tablename   Use 'schema.tablename' with 'explain=' option.  
  explain=user/password    Connect to ORACLE and issue EXPLAIN PLAN.  
  print=integer    List only the first 'integer' SQL statements.  
  aggregate=yes|no  
  insert=filename  List SQL statements and data inside INSERT statements.  
  sys=no           TKPROF does not list SQL statements run as user SYS.  
  record=filename  Record non-recursive statements found in the trace file.  
  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:  
    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    www.2cto.com  
    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  
 
              注释:
              ① fchela这是个比较有用的sort选项,在生成的.prf文件将把最消耗时间的sql放在最前面显示
              ② sys=no 以sys身份执行的sql不会被显示,增加可读性
 
    3 tkprof输出文件中各列的含义
[sql] 
call     count       cpu    elapsed       disk      query    current        rows  
------- ------  -------- ---------- ---------- ---------- ----------  ----------  
          注释:  www.2cto.com  
          ㈠ call:
             每次sql的处理都分成3个部分
             ① parse:将sql语句转成执行计划,包括检查权限、表及其关联对象是否存在等
             ② execute:由sql引擎执行,因事务类型不同而异
             ③ fetch:这步只有select语句被执行,buffer cache是主战场
          ㈡ count:
             这条sql被parse、execute和fetch的次数
          ㈢ cpu:该sql语句所消耗的cpu的时间(单位:s)
          ㈣ elapsed:该sql语句在各个阶段的执行时间
          ㈤ disk:
             从磁盘上的数据文件中物理读取的块的数量
          ㈥ query:
             在一致性读的模式下,各阶段所获得的buffer的数量。一致性模式下,buffer是用于给一个长查询提供一致性
             读的快照
          ㈦ current:
             在当前读的模式下,各阶段所获得的buffer的数量。
          ㈧ rows:
             所有的sql返回的记录数目,但不包括子查询返回的记录。
             对于select语句,返回是在fetch这步
             对于DML语句,返回是在execute这步
   www.2cto.com  
    4 tkprof的使用步骤
        ⑴ 在实例级别上设置timed_statistic=true
        SQL> show parameter timed_statistic
        
        NAME_COL_PLUS_SHOW_P TYPE                   VALUE_COL_PLUS_SHOW_
        -------------------- ---------------------- --------------------
        timed_statistics     boolean                TRUE
        ⑵ 使用各种工具得到想要查看session的trc文件
        ⑶ udump路径找到生成的trc文件
        ⑷ 对trc文件进行tkprof分析
           tkprof tracefile outfile [options]
           注意:这条语句后面没有分号结尾!!
 
    5案例
[sql] 
18:32:55 hr@ORCL (^ω^) alter session set events '10046 trace name context forever,level 12';  
  
会话已更改。  
  
18:34:00 hr@ORCL (^ω^) select count(*) from t;  
  
  COUNT(*)  
----------  
         2  
18:34:00 hr@ORCL (^ω^) update t1 set tname='think high' where id=1;  
    www.2cto.com  
已更新 1 行。  
18:34:30 hr@ORCL (^ω^) alter session set events '10046 trace name context off';  
  
会话已更改。  
  
18:34:55 hr@ORCL (^ω^) exit  
  
D:\oracle\product\10.2.0\admin\orcl\udump>tkprof orcl_ora_6004.trc C:\Users\Administrator\tkprof_starting.txt sys=no waits=yes sort=fche  
  
TKPROF: Release 10.2.0.1.0 - Production on 星期日 9月 23 19:19:13 2012  
  
Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
 
    这个tkprof文件最后的一部分如下:
[sql] 
OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS  
    www.2cto.com  
call     count       cpu    elapsed       disk      query    current        rows  
------- ------  -------- ---------- ---------- ---------- ----------  ----------  
Parse       11      0.03       0.16          0          0          0           0  
Execute     41      0.07       0.22          0          0          0           0  
Fetch       48      0.03       0.12          3        118          0          50  
------- ------  -------- ---------- ---------- ---------- ----------  ----------  
total      100      0.14       0.51          3        118          0          50  
  
Misses in library cache during parse: 11  
Misses in library cache during execute: 11  
  
Elapsed times include waiting on following events:  
  Event waited on                             Times   Max. Wait  Total Waited  
  ----------------------------------------   Waited  ----------  ------------  
  db file sequential read                         3        0.02          0.05  
  
    3  user  SQL statements in session.  
   41  internal SQL statements in session.  
   44  SQL statements in session.  
 
********************************************************************************  
Trace file: orcl_ora_6004.trc  
Trace file compatibility: 10.01.00  
Sort options: fchela    
       1  session in tracefile.  
       3  user  SQL statements in trace file.  
      41  internal SQL statements in trace file.  
      44  SQL statements in trace file.  
      14  unique SQL statements in trace file.  
     902  lines in trace file.  
      55  elapsed seconds in trace file.  
  www.2cto.com  
          注释:
          ① 这个session共有44条sql语句在里面,对于递归的语句一共分析了41次
          ② 计算hit ratio
             logical reads=consistent gets+ db block gets
             consistent gets=query列的execute+query列的fetch
             db block gets=current列的execute+current列的fetch
             因此,logical reads=118+0+0+0=118
             physical reads=disk列,即:3
             所以,hit ratio=L/(L+P)=97.5%
 
          ③ 还有一对参数非常重要,fetch的次数以及取得的记录的行数,一般来说,以尽可能少的fetch来取得尽可能多的记录数
             ,也就是,fetch的值要远远小于取得的记录数才好。从上面这个例子可知,fetch了48,rows 50,这表明
             有些记录是通过好几次的fetch才得到的。这个session的有些sql是需要优化的。
          ④ 从query列的parse可以看出从row cache里读取的数据
 
    这个tkprof文件中两个sql语句摘入如下:
[sql] 
********************************************************************************  
  
select count(*)   
from  
 t    www.2cto.com  
  
call     count       cpu    elapsed       disk      query    current        rows  
------- ------  -------- ---------- ---------- ---------- ----------  ----------  
Parse        1      0.01       0.06          0          0          0           0  
Execute      1      0.00       0.00          0          0          0           0  
Fetch        2      0.00       0.01          6          7          0           1  
------- ------  -------- ---------- ---------- ---------- ----------  ----------  
total        4      0.01       0.08          6          7          0           1  
  
Misses in library cache during parse: 1  
Optimizer mode: ALL_ROWS  
Parsing user id: 55    
  
Rows     Row Source Operation  
-------  ---------------------------------------------------  
      1  SORT AGGREGATE (cr=7 pr=6 pw=0 time=15493 us)  
      2   TABLE ACCESS FULL T (cr=7 pr=6 pw=0 time=15449 us)  
    www.2cto.com  
Elapsed times include waiting on following events:  
  Event waited on                             Times   Max. Wait  Total Waited  
  ----------------------------------------   Waited  ----------  ------------  
  SQL*Net message to client                       2        0.00          0.00  
  db file sequential read                         1        0.01          0.01  
  db file scattered read                          1        0.00          0.00  
  SQL*Net message from client                     2        0.00          0.00  
 
            注释:
            从上面的输出可以看到,这条语句访问了7个块来找到需要select的记录,返回1条记录。
            这个查询parse了1次,而且是hard parse 1次。
            select语句主要看fetch这一行
[sql] 
********************************************************************************  
  
update t1 set tname='think high'   
where    www.2cto.com  
 id=1  
  
call     count       cpu    elapsed       disk      query    current        rows  
------- ------  -------- ---------- ---------- ---------- ----------  ----------  
Parse        1      0.00       0.00          0          0          0           0  
Execute      1      0.00       0.03          0          5          2           1  
Fetch        0      0.00       0.00          0          0          0           0  
------- ------  -------- ---------- ---------- ---------- ----------  ----------  
total        2      0.00       0.03          0          1          1           1  
  
Misses in library cache during parse: 1  
Optimizer mode: ALL_ROWS  
Parsing user id: 55    
  
Rows     Row Source Operation  
-------  ---------------------------------------------------  
      1  UPDATE  T1 (cr=1 pr=0 pw=0 time=31186 us)  
      1   INDEX UNIQUE SCAN INDEX_T1 (cr=1 pr=0 pw=0 time=23 us)(object id 54498)  
    www.2cto.com  
Elapsed times include waiting on following events:  
  Event waited on                             Times   Max. Wait  Total Waited  
  ----------------------------------------   Waited  ----------  ------------  
  SQL*Net message to client                       1        0.00          0.00  
  SQL*Net message from client                     1        0.00          0.00  
 
            注释:
            这条语句访问了5个block来找到需要的update的记录,在执行update的时候只访问了2个,一共更新了1条记录
            DML语句主要看execute这一行

推荐阅读
  • 本文探讨了使用C#在SQL Server和Access数据库中批量插入多条数据的性能差异。通过具体代码示例,详细分析了两种数据库的执行效率,并提供了优化建议。 ... [详细]
  • 方法:1 配置数据库basediros.path.abspath(os.path.dirname(__file__))  #获取当前文件的绝对路径appFlask(__name__ ... [详细]
  • 本文详细探讨了 org.apache.hadoop.ha.HAServiceTarget 类中的 checkFencingConfigured 方法,包括其功能、应用场景及代码示例。通过实际代码片段,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 福克斯新闻数据库配置失误导致1300万条敏感记录泄露
    由于数据库配置错误,福克斯新闻暴露了一个58GB的未受保护数据库,其中包含约1300万条网络内容管理记录。任何互联网用户都可以访问这些数据,引发了严重的安全风险。 ... [详细]
  • JavaScript 中创建对象的多种方法
    本文详细介绍了 JavaScript 中创建对象的几种常见方式,包括对象字面量、构造函数和 Object.create 方法,并提供了示例代码和属性描述符的解释。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本文介绍如何使用SAS根据输入数据集自动生成并执行SQL查询,其中CASE语句依据另一个数据集中的观测值动态调整。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • Oracle中NULL、空字符串和空格的处理与区别
    本文探讨了在Oracle数据库中使用NULL、空字符串('')和空格('_')时可能遇到的问题及解决方案。重点解释了它们之间的区别,以及在查询和函数中的行为。 ... [详细]
  • Oracle 数据导出为 SQL 脚本的详细步骤
    本文介绍如何使用 PL/SQL Developer 工具将 Oracle 数据库中的数据导出为 SQL 脚本,包括详细的步骤和注意事项。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 1.介绍有时候我们需要一些模拟数据来进行测试,今天简单记录下如何用存储过程生成一些随机数据。2.建表我们新建一张学生表和教师表如下:CREATETABLEstudent(idINT ... [详细]
  • 1.执行sqlsever存储过程,消息:SQLServer阻止了对组件“AdHocDistributedQueries”的STATEMENT“OpenRowsetOpenDatas ... [详细]
  • 在Fedora 31上部署PostgreSQL 12
    本文详细介绍如何在Fedora 31操作系统上安装和配置PostgreSQL 12数据库。包括环境准备、安装步骤、配置优化以及安全设置,确保数据库能够稳定运行并提供高效的性能。 ... [详细]
  • 本文介绍了解决在Windows操作系统或SQL Server Management Studio (SSMS) 中遇到的“microsoft.ACE.oledb.12.0”提供程序未注册问题的方法,特别针对Access Database Engine组件的安装。 ... [详细]
author-avatar
lydia芸小窝的天使
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有