오늘 있었던 일...
흔한 사례는 아니다.
서버 유지보수 담당자가 어제부터 특정 응용시스템 DB 1번서버가 CPU 풀찼다고 알려왔다.
우짜고... 우왕좌왕....
검색을 해봤다. 일단 할 수 있는 건 pid를 이용해서 해당 프로세스가 어떤 쿼리를 돌리고 있는지 찾는 것.
아래와 같은 쿼리를 찾았다.
SELECT c.sql_fulltext, a.username
FROM v$session a, v$process b, v$sql c
WHERE a.paddr = b.addr
AND a.sql_address = c.address
AND b.spid = #PID# ;
실행했는데... 쿼리가 실행시간이 길다..... 안그래도 DB가 불안한데 안되겠다.
쿼리를 수정한다.
SELECT c.sql_fulltext
FROM v$sql c
WHERE c.address
in (SELECT sql_address
FROM v$session a
WHERE a.paddr in (SELECT addr
FROM v$process b
WHERE b.spid in ('766369'))
);
됐다. 약 5초정도 걸린다.
이럴 줄은 몰랐는데 CPU를 잡아먹은 모든 프로세스가 하나의 쿼리에 대한 것이었다.
쿼리를 가지고 원인 파악 결과...
하자보수하러 들어온 개발자가 실행했다가 취소한 잘못된 쿼리가 그대로 남아 돌고 있던 것....
해당 프로세스들을 kill 해서 종결시켰다.
댓글
댓글 쓰기