使用oracle的10046事件跟蹤SQL語句

cosio發表於2008-11-02

使用oracle的10046事件跟蹤SQL語句

[@more@]

我們在分析應用程式效能問題的時候,更多地需要關注其中SQL語句的執行情況,因為通常應用程式的效能瓶頸會在資料庫這邊,因此資料庫的sql語句是我們最佳化的重點。利用Oracle的10046事件,可以跟蹤應用程式所執行的SQL語句,並且得到其解析次數.執行次數,CPU使用時間等資訊。這對我們分析、定位資料庫效能問題是非常有用的。

具體的方法如下:

1、首先獲得spid、sid、serial#,machine為連線oracle的機器名

SQL> select b.spid,a.sid,a.serial#,a.machine from v$session a,v$process b where a.paddr =

b.addr and a.machine='SYS_F85';

SPID SID SERIAL# MACHINE
----------------------------------------------------------------
24722 15 196 SYS_F85


2、利用10046事件開始跟蹤

SQL>execute sys.dbms_system.set_ev(15,196,10046,1,'');
PL/SQL procedure successfully completed.

引數說明:
15:SID
196:SERIAL#

注意這裡必須以sysdba登入。

3、在應用程式中執行對資料庫的操作,比如效能較差的一些查詢、插入、刪除操作等。

4、關閉事件結束跟蹤
SQL>execute sys.dbms_system.set_ev(15,196,10046,0,'');

PL/SQL procedure successfully completed.

5、獲得產生的跟蹤檔案所在的目錄
SQL> select value from v$parameter where name = 'user_dump_dest';

VALUE

--------------------------------------------------------------------------------
/oracle/admin/ora9i/udump

轉到該目錄下可以看到生成了一個ora9i_ora_24722.trc檔案,此處的24722即SPID的值。

6、在命令列下執行oracle的tkprof命令,將ora9i_ora_24722.trc轉化為文字檔案。如:
$ tkprof ora9i_ora_24722.trc ora9i_ora_24722.sql

此時在ora9i_ora_24722.sql檔案中,就可以看到剛才執行應用程式時所執行的sql語句的執行次數、

CPU使用時間等資料。

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

相關文章