ITPub博客

首页 > Linux操作系统 > Linux操作系统 > sql trace 简单测试

sql trace 简单测试

原创 Linux操作系统 作者:sxitsxit 时间:2011-10-10 18:25:11 0 删除 编辑

针对sql trace 做了如下案例分析

在当前seesion级别测试

1:启用session跟踪


SQL> alter session set sql_trace=true;

Session altered.

2:执行相关查询或dml语句,捕捉相关信息

SQL> select count(*) from C;

  COUNT(*)
----------
        10

3:此时会生成一个trace文件,然后关闭会话跟踪

SQL> alter session set sql_trace=false;

Session altered.

SQL>

4:查看trace文件保存路径

SQL> show parameter user_dump_dest;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest                       string      /home/oracle/admin/ora10/udump
SQL>

5:查看进程产生的是哪个trace文件

SQL> SELECT c.value||'/'||d.instance_name||'_ora_'||a.spid||'.trc' trace_file_name  
    from v$process a,v$session b,v$parameter c,v$instance d
    where a.addr=b.paddr
   and b.audsid=userenv('sessionid')
    and c.name='user_dump_dest';

TRACE_FILE_NAME
--------------------------------------------------------------------------------
/home/oracle/admin/ora10/udump/ora10_ora_6184.trc

SQL>

6:用tkprof 格式化trace文件

[oracle@sxit-test1 ~]$ tkprof /home/oracle/admin/ora10/udump/ora10_ora_6184.trc  /home/oracle/2.txt

TKPROF: Release 10.2.0.4.0 - Production on Mon Oct 10 18:34:06 2011

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


[oracle@sxit-test1 ~]$

7:查看格式化后的结果

[oracle@sxit-test1 ~]$ more /home/oracle/2.txt

TKPROF: Release 10.2.0.4.0 - Production on Mon Oct 10 18:34:06 2011

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

Trace file: /home/oracle/admin/ora10/udump/ora10_ora_6184.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
********************************************************************************

select count(*)
from C

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      0.00       0.00          0         21          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.00       0.00          0         21          0           1

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 66 

Rows     Row Source Operation
-------  ---------------------------------------------------
      1  SORT AGGREGATE (cr=21 pr=0 pw=0 time=144 us)
     10   TABLE ACCESS FULL MT_AS_MSG_18 (cr=21 pr=0 pw=0 time=92 us)

针对结果,有几点说明:

parse :表示解析

execute:表示执行

fetch:表示回显

列值:

count: 表示执行的次数

elapsed表示执行sql所花费的时间,cpu表示执行sql消耗的cpu 时间,elapsed里有wait 的时间
elapsed 和cpu time相差越大表示等待越严重
disk表示的是磁盘的物理读
current表示的是dml操作对应的get buffer
query是select操作对应的get buffer

如果针对其他用户进程,可参考以下网址

http://www.eygle.com/case/Use.sql_trace.to.Diagnose.database.htm

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

请登录后发表评论 登录
全部评论

注册时间:2011-04-14

  • 博文量
    98
  • 访问量
    323764