DB/Tuning

[펌] sql trace및 tkprof 간편하게 하기

시처럼 음악처럼 2007. 11. 7. 11:18
퍼온곳 : http://www.dbguide.net/dbqa/dbqa120001.jsp?mode=view&idx=713

일반적으로 sql을 튜닝하고자 할때

sql_trace를 =true로 놓고  sql trace를 뜨게 되는데 보통 해당 trace 파일을 찾고자 할경우

udump 밑에서 ls -rlt로 맨 아래 파일을 찾는데요

여러 사람이 동시에 trace를 뜨게 되면 어느것이 내가 뜬것이 확인이 안되는 경우가 많습니다.


그럴 때 아래 sql을 이용, 응용하면 정확하게 해당 trace파일을 찾을 수 있다.

col "Session Info" form A80


select '               DB Name : '|| para.value || chr(10) ||
       ' Sid, Serial#, Aud sid : '|| s.sid||' , '||s.serial#||' , '||
       s.audsid||chr(10)|| '     DB User / OS User : '||s.username||
       '   /   '||s.osuser||chr(10)|| '    Machine - Terminal : '||
       s.machine||'  -  '|| s.terminal||chr(10)||
       '        OS Process Ids : '||
       s.process||' (Client)  '||p.spid||' (Server)'|| chr(10)||
       '   Client Program Name : '||s.program "Session Info"
  from v$process p,v$session s ,v$parameter para
 where p.addr = s.paddr
   and s.audsid = userenv('SESSIONID')
   and para.name = 'db_name'
/


결과 ...


Session Info

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

               DB Name : ORAKLDB
 Sid, Serial#, Aud sid : 830 , 2744 , 1286233794
     DB User / OS User : SYSTEM   /   oracle
    Machine - Terminal : kldb2  -  pts/13
        OS Process Ids : 1319077 (Client)  1318312 (Server)
   Client Program Name : sqlplus@kldb2 (TNS V1-V3)


 

위 결과에서 1318312 가 trace발생시 process번호에 해당 하는 겁니다.


경우에 따라

tkprof ora_$1.trc $1.prf sort=fchela,execpu sys=no explain=id/pass
vi $1.prf

와 같은 script를 수정해서 sql 에 대한 trace작업에서 tkprof작업까지 한번에 해결할수 있더군요

소스가 완벽하지는 않네요..

그럼 수고하세요

=================================================================================

위 쿼리를 보기좋게 변경.

select para.value "DB Name"
     , s.sid
     , s.serial#
     , s.audsid
     , s.username "DB User"
     , s.osuser "OS User"
     , s.machine||'  -  '|| s.terminal "Machine - Terminal"
     , s.process "Client Process Ids"
     , p.spid "Server Process Ids" 
     , s.program "Client Program"
  from v$process p,v$session s ,v$parameter para
 where p.addr = s.paddr
   and s.audsid = userenv('SESSIONID')
   and para.name = 'db_name'