怎樣收集errorstacks來論斷效能問題

luckyfriends發表於2014-03-06

為了轉儲跟蹤和errorstacks資訊,可以使用作業系統程式ID或者oracle程式ID.比如可以透過oracle的sid來查詢到作業系統進ID:
SELECT p.pid, p.SPID,s.SID
FROM v$process p, v$session s
WHERE s.paddr = p.addr
AND s.SID = &SID;

SPID是作業系統識別符號
SID是oracle會話識別符號
PID是oracle程式識別符號

比如一個SPID是1254,pid是56如果使用SPID來生成轉儲和errorstacks資訊可以執行下面的語句:

connect / as sysdba
ALTER SESSION SET tracefile_identifier = 'STACK_10046';
oradebug setospid 1254
oradebug unlimit
oradebug event 10046 trace name context forever,level 12
oradebug dump errorstack 3
oradebug dump errorstack 3
oradebug dump errorstack 3
oradebug tracefile_name
oradebug event 10046 trace name context off

如果使用PID來生成轉儲和errorstacks資訊可以執行下面的語句:

connect / as sysdba
ALTER SESSION SET tracefile_identifier = 'STACK_10046';
oradebug setpid 56
oradebug unlimit
oradebug event 10046 trace name context forever,level 12
oradebug dump errorstack 3
oradebug dump errorstack 3
oradebug dump errorstack 3
oradebug tracefile_name
oradebug event 10046 trace name context off

其中oradebug tracefile_name命令會顯示跟蹤檔案的名字和位置,在生成的跟蹤檔名字會包含STACK_10046字元

如果要對當前會話收集errorstacks資訊首先要找出當前會話的SPID或PID可以執行如下語句來獲得:

SELECT p.pid, p.SPID,s.SID
FROM v$process p, v$session s
WHERE s.paddr = p.addr
AND s.audsid = userenv('SESSIONID') ;

或者

SELECT p.pid, p.SPID,s.SID
FROM v$process p,v$session s
WHERE s.paddr = p.addr
AND s.SID =
(SELECT DISTINCT SID
FROM V$MYSTAT);

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

相關文章