使用TKPROF格式化TRACE输出之"解剖麻雀" - 范文中心

使用TKPROF格式化TRACE输出之"解剖麻雀"

01/23

【TKPROF 】使用TKPROF 格式化TRACE 输出之“解剖麻雀” 2009-10-21 11:26:54 《【SQL_TRACE】SQL 优化及性能诊断好帮手》

http://space.itpub.net/519536/viewspace-616240中简单的提到了使用TKPROF 工具格式化SQL_TRACE的输出信息的方法,并没有对输出的内容做比较清楚的描述,通过这个小文儿,展示一下TKPROF 对trace 文件格式化的魅力,这里只给出具体输出信息含义的描述,不展示真实的性能诊断案例。

1. 与之上次使用到的SQL_TRACE功能相比,我们这次将使用更高级的trace 命令(10046)来做演示。我们先启用“高级”的10046事件生成一份待格式化的trace 文件

1)连接到普通用户sec

sys@ora10g> conn sec/sec

Connected.

2)先将timed_statistics参数设置为true ,这样可以使TKPROF 工具能提供更多的有意义的信息,方便性能诊断

sec@ora10g> alter session set timed_statistics=true;

Session altered.

3)“高级”之所在,我们这里启用10046的level 12对当前会话进行跟踪。

(1)在此,给出10046各level 的解释参考:

level 1 to enable the standard SQL_TRACE facility (same as SQL_TRACE=TRUE)

等同于标准的SQL_TRACE=TRUE;

level 4 to enable SQL_TRACE and also capture bind variable values in the trace file

启用SQL_TRACE,并捕捉跟踪文件中的绑定变量;

level 8 to enable SQL_TRACE and also capture wait events into the trace file

启用SQL_TRACE,并捕捉跟踪文件中的等待事件;

level 12 to enable standard SQL_TRACE and also capture bind variables and wait events

启用SQL_TRACE,并捕捉跟踪文件中的绑定变量和等待事件(捕获信息能力最强)。

(2)对当前会话启用level 12的跟踪:

sec@ora10g> alter session set events '10046 trace name context forever, level 12';

Session altered.

(3)【补充】如果想使用这种高级方法对其他的会话进行跟踪的话,可以使用如下的SQL 语句开启和关闭:

开启:execute dbms_system.set_ev(sid,serial#,10046,12,''); 关闭:execute dbms_system.set_ev(sid,serial#,10046,0,''); 举例如下:

A. 获得sid, serial#的信息

sys@ora10g> select sid, serial# from v$session;

B. 开启

sys@ora10g> execute

dbms_system.set_ev(543,1306,10046,12,'');

C. 关闭

sys@ora10g> execute

dbms_system.set_ev(543,1306,10046,0,'');

4)在该会话中运行一条具体的SQL 语句,此处使用到的实验表t 中包含1亿条

数据。该SQL 语句的执行情况将被细致的记录到trace 文件中。

sec@ora10g> select count(*) from t;

COUNT(*)

----------

100000000

5)关闭当前会话的跟踪

sec@ora10g> alter session set events '10046 trace name context off';

Session altered.

2. 在udump 目录中找到刚刚生成的trace 文件(关于如何快速获得生成的trace 文件的方法有很多种,选择一个适合自己的就OK ),并使用TKPROF 对其进行格式化,然后打印一下全部输出,后面将对每一个输出项做一下“解剖麻雀”:)

ora10g@secDB /oracle/app/oracle/admin/ora10g/udump$ tkprof

ora10g_ora_21213.trc ora10g_ora_21213.prf

TKPROF: Release 10.2.0.3.0 - Production on Wed Oct 21 10:04:40 2009

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

ora10g@secDB /oracle/app/oracle/admin/ora10g/udump$ cat

ora10g_ora_21213.prf

TKPROF: Release 10.2.0.3.0 - Production on Wed Oct 21 10:05:43 2009

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

Trace file: ora10g_ora_21213.trc

Sort options: default

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

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

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

BEGIN DBMS_OUTPUT.GET_LINES(:LINES, :NUMLINES); END;

call count cpu elapsed disk query current rows

------- ------ -------- ---------- ---------- ----------

---------- ----------

Parse 2 0.00 0.00 0 0 0 0

Execute 2 0.00 0.00 0 0 0 2

Fetch 0 0.00 0.00 0 0 0 0

------- ------ -------- ---------- ---------- ----------

---------- ----------

total 4 0.00 0.00 0 0 0 2

Misses in library cache during parse: 0

Optimizer mode: ALL_ROWS

Parsing user id: 51

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

SQL*Net message from

client 2 5.60 7.74

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

select count(*)

from

t

call count cpu elapsed disk query current rows

------- ------ -------- ---------- ---------- ----------

---------- ----------

Parse 1 0.00 0.00 0 0 0 0

Execute 1 0.00 0.00 0 0 0 0

Fetch 2 10.94 10.68 222186 222957 0 1

------- ------ -------- ---------- ---------- ----------

---------- ----------

total 4 10.94 10.68 222186 222957 0 1

Misses in library cache during parse: 0

Optimizer mode: ALL_ROWS

Parsing user id: 51

Rows Row Source Operation

------- ---------------------------------------------------

1 SORT AGGREGATE (cr=222957 pr=222186 pw=0 time=10686023 us) 100000000 INDEX FAST FULL SCAN PK_T (cr=222957 pr=222186 pw=0 time=100000562 us)(object id 45619)

Elapsed times include waiting on following events:

Event waited on Times Max. Wait Total Waited

---------------------------------------- Waited ---------- ------------

SQL*Net message to

client 3 0.00 0.00

SQL*Net message from

client 3 0.00 0.00

db file scattered

read 14249 0.00 1.10

db file sequential

read 59 0.00 0.00

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

OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS

call count cpu elapsed disk query current rows

------- ------ -------- ---------- ---------- ----------

---------- ----------

Parse 3 0.00 0.00 0 0 0

Execute 3 0.00 0.00 0 0 0 2

Fetch 2 10.94 10.68 222186 222957 0 1

------- ------ -------- ---------- ---------- ----------

---------- ----------

total 8 10.94 10.68 222186 222957 0 3

Misses in library cache during parse: 0

Elapsed times include waiting on following events:

Event waited on Times Max. Wait Total Waited

---------------------------------------- Waited ---------- ------------

SQL*Net message to

client 5 0.00 0.00

SQL*Net message from

client 5 5.60 7.74

db file scattered

read 14249 0.00 1.10

db file sequential

read 59 0.00 0.00

OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS

call count cpu elapsed disk query current rows

------- ------ -------- ---------- ---------- ----------

---------- ----------

Parse 0 0.00 0.00 0 0 0 0

Execute 0 0.00 0.00 0 0 0 0

Fetch 0 0.00 0.00 0 0 0 0

------- ------ -------- ---------- ---------- ----------

---------- ----------

total 0 0.00 0.00 0 0 0 0

Misses in library cache during parse: 0

3 user SQL statements in session.

0 internal SQL statements in session.

3 SQL statements in session.

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

Trace file: ora10g_ora_21213.trc

Trace file compatibility: 10.01.00

Sort options: default

1 session in tracefile.

3 user SQL statements in trace file.

0 internal SQL statements in trace file.

3 SQL statements in trace file.

2 unique SQL statements in trace file.

14392 lines in trace file.

16 elapsed seconds in trace file.

3. 对上面的TKPROF 格式化输出内容重点内容“解剖麻雀”正式开始

1)摘录第一部分,SQL 语句的执行情况总览

select count(*)

from

t

call count cpu elapsed disk query current rows

------- ------ -------- ---------- ---------- ----------

---------- ----------

Parse 1 0.00 0.00 0 0 0 0

Execute 1 0.00 0.00 0 0 0 0

Fetch 2 10.94 10.68 222186 222957 0 1

------- ------ -------- ---------- ---------- ----------

---------- ----------

total 4 10.94 10.68 222186 222957 0 1

关于统计表格的标题信息中count 、cpu 、elapsed 、disk 、query 、current 和rows 的说明在该trace 文件的最前端有一个简要的说明,这里再分别赘述一下。

count :查询在此阶段执行的次数;

cpu :该查询在此阶段的CPU 时间量,以毫秒为单位;

elapsed :花费在此阶段上的挂钟时间,该值比cpu 值大的时候,表明存在等待事件;

disk :执行物理I/O次数;

query :在意一致性检索方式获得块时,执行逻辑I/O次数;

current :逻辑I/O次数;

rows :此阶段,被处理或受影响的行数。

关于第一列的赘述:

Parse :软编译和硬编译次数;

Execute :在open 和execute 语句中完成的内容;

Fetch :select 中会有数据显示,在update 语句中不会有数据显示。

2)摘录运行环境信息

Misses in library cache during parse: 0

Optimizer mode: ALL_ROWS

Parsing user id: 51

第一行的“0”表示查询使用的是软解析(soft parse)。

优化模式是:ALL_ROWS

使用最后一行的用户ID 可以获得执行时的会话信息。获得用户信息可以通过下面的SQL 语句完成。

sys@ora10g> select * from all_users where user_id = 51;

USERNAME USER_ID CREATED

------------------------------ ---------- ------------------- SEC 51 2009-10-15 13:04:03

3)摘录执行计划信息

Rows Row Source Operation

------- ---------------------------------------------------

1 SORT AGGREGATE (cr=222957 pr=222186 pw=0 time=10686023 us) 100000000 INDEX FAST FULL SCAN PK_T (cr=222957 pr=222186 pw=0 time=100000562 us)(object id 45619)

有趣发现:通过第二行可以得到这个t 表的数据量,这里显示结果是1亿。 “解剖”上面出现的几个重要参数:

cr=222957 -- 一致性读取

pr=222186 -- 物理读取

pw=0 -- 物理写

time=100000562 us -- 占用时间,单位:微妙 百万分之一秒

4)摘录等待事件

Elapsed times include waiting on following events:

Event waited on Times Max. Wait Total Waited

---------------------------------------- Waited ---------- ------------

SQL*Net message to

client 3 0.00 0.00

SQL*Net message from

client 3 0.00 0.00

db file scattered

read 14249 0.00 1.10

db file sequential

read 59 0.00 0.00

通过这段等待事件的描述,可以清楚的得到在执行SQL 语句的过程中都出现了哪些引人注目的等待事件。比如上面显示出的“db file scattered read”和“db file sequential read”信息,如果此类信息在生产环境中大量出现,就需要重点深入分析和研究了。

4. 小结

整个“解剖麻雀”的过程到此告一段落,相信您对“10046跟踪”和TKPROF 格式化有了一个整体上的了解,这里只是通过一个示例来展示一下trace 跟踪和TKPROF 的强大。更重要的是在生产环境故障诊断过程中的具体问题具体分析。

这里不得不提醒一下的是,在生产环境中使用10046 level 12方法对会话进行跟踪时,要充分考虑到它对系统性能的影响,前期测试是必须的步骤。

-- The End --


相关内容

  • 第6讲多因素方差分析与多因素实验设计20**年0503
    多因素方差分析与多因素实验设计 一.多因素方差分析的操作步骤 二.多因素方差分析必须具备的条件 三.多因素方差分析的基本类型 四.利用SPSS进行多因素方差分析 五.在SPSS中实现事后多重比较和简单 效应检验 一.方差分析的操作步骤 1. ...
  • 软件测试心得
    软件测试心得体会 软件测试工作是一个系统而复杂的工程,软件测试的目的就是确保软件的质量.确认软件以正确的方式做了你所期望的事情,所以工作的主要任务是发现软件的错误.有效定义和实现软件成分由底层到高层的组装过程.验证软件是否满足规格书要求和系 ...
  • 贝类对重金属的吸收转运与累积规律研究进展
    万方数据 水产科学 第26卷 属被体表黏液,肠胃黏液或呼吸时被鳃所滞留.而透过体表吸收主要有3种形式: (1)重金属在生物体内能与生物大分子相结合,如果这种结合能力很强,被累积的程度也很高,其原因很可能是金属与大分子结合之后不容易通过细胞膜 ...
  • WEBDAV 请求的格式
    HTTP 1.1(请参阅 IETF RFC 2068)提供一组可供客户端与服务器通讯的方法,并指定响应(从服务器返回发出请求的客户端)的格式. WebDAV 完全采用此规范中的所有方法,扩展其中的一些方法,并引入了其他可提供所描述功能的方法 ...
  • 五年级下册信息技术知识点泰山版
    第一单元电子邮件传真情 互联网上提供电子服务的常用网站,如网易.新浪.搜狐. 邮箱密码使用大小写字母.数字和符号组合起来设置,这样更安全. 古时候通信有烽火台.驿站. 注册电子邮箱: 登陆126或其他邮箱网站. 单击"立即注册&q ...
  • 北京理工大学信号与系统实验报告3 信号的频域分析
    实验3 信号的频域分析 (综合型实验) 一.实验目的 1)深入理解信号频谱的概念,掌握信号的频域分析方法. 2)观察典型周期信号和非周期信号的频谱,掌握其频谱特性. 二.实验原理与方法 1. 连续周期信号的频谱分析 如果周期信号满足Diri ...
  • C语言源程序
    C 语言程序设计 C 语言程序设计 1.程序运行从main()函数开始,也从main()函数结束. 2.函数是C 程序的,. 3.C 语言源程序是由函数组成,它们. 4.在C 语言源程序中,是必须有一个函数名为main 的函数.main() ...
  • 会计电算化课程讲义
    克拉玛依市会计学会 2011年会计电算化课程培训讲义 第一章会计电算化概论 .......................................................................... 2 第二章电算 ...
  • 信息学奥林匹克竞赛教程
    第一课初识Pascal语言 信息学奥林匹克竞赛是一项益智性的竞赛活动,核心是考查选手的智力和使用计算机解题的能力.选手首先应针对竞赛中题目的要求构建数学模型,进而构造出计算机可以接受的算法,之后要写出高级语言程序,上机调试通过.程序设计是信 ...
  • GIS中地图输出的表现形式
    2001年 第2期 测 绘 通 报 9 文章编号:0494-0911(2001) 02-0009-03 中图分类号:P 208 文献标识码:B GIS 中地图输出的表现形式 赵军喜, 华一新 (解放军信息工程大学测绘学院, 河南郑州4500 ...