2012년 9월 14일 금요일

PID, SID를 이용하여 oracle query 확인


DB Server의 Resource를 과도하게 사용하는 프로세스를 확인할 때 사용한다.

PID를 알고 있을 경우

SELECT S.USERNAME USERNAME, S.OSUSER, S.PROGRAM, T.SQL_TEXT SQL, T.PIECE
FROM V$SQLTEXT T, V$SESSION S,
  (SELECT S.USERNAME USERNAME, S.OSUSER OSUSER, S.PROGRAM PROGRAM
  FROM V$SESSION S, V$PROCESS P
  WHERE P.ADDR = S.PADDR
  AND   S.SID IN (
    SELECT S.SID
    FROM V$SESSION S,V$PROCESS P
    WHERE P.ADDR=S.PADDR AND P.SPID = 6166)
  ) U
WHERE T.ADDRESS = S.SQL_ADDRESS
AND   S.USERNAME = U.USERNAME
AND   S.OSUSER  = U.OSUSER
AND   S.PROGRAM = U.PROGRAM
ORDER BY PIECE
;


SELECT SQL_TEXT
FROM V$SQLAREA
WHERE HASH_VALUE = (
  SELECT S.SQL_HASH_VALUE
  FROM V$SESSION S, V$PROCESS P
  WHERE P.ADDR=S.PADDR AND P.SPID=6166
  );

SID를 알고 있을 경우


SELECT /*+ RULE ORDERED */
S.SID,
S.SERIAL#,
S.SQL_HASH_VALUE,
Q.SQL_TEXT
FROM V$SESSION S,
V$SQLTEXT Q
WHERE S.SQL_HASH_VALUE = Q.HASH_VALUE
AND S.SQL_ADDRESS = Q.ADDRESS
AND S.SID = 948
AND S.SQL_HASH_VALUE <> 0
ORDER BY S.SID, Q.PIECE
;

process 확인은 다음의 명령어를 사용했다.
ps -ef -o user,pid,ppid,pcpu,vsz,pmem,nlwp,etime,time,args | sort -r -k 4 | head -n 15



댓글 없음:

댓글 쓰기