sql trace 簡單測試

xfhuangfu發表於2015-07-04

針對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

如果針對其他使用者程式,可參考以下網址

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28373936/viewspace-1722309/,如需轉載,請註明出處,否則將追究法律責任。

相關文章