한 세션에서 쿼리를 수행하는데 아주 많은 CPU를 사용한다면 그 세션을 일단 찾아서 kill시켜야 한다.
일단, 현재 CPU를 많이 소모하고 있는 세션과 그 쿼리를 찾는 방법은 무엇일까?
1. os명령어 top으로 현재 cpu를 많이 소모하고 있는 세션의 ospid를 알아낸다.
2. 다음의 쿼리로 해당 세션의 pid를 알아낸다.
3. 2번에서 찾아낸 sid를 이용하여 SQL을 찾아낸다.
sqlplus에서 세션 kill하기
특정 세션을 죽이기 위한 SQL문은 다음과 같다.
이 SQL을 실행하게 되면 바로 그 세션이 죽는 것이 아니라, SMON에 의해서 롤백과 같은 작업이 진행된다.
(alert 로그를 보면 다음과 같은 메시지가 나온다. : SMON: Parallel transaction recovery tried)
참고 : http://cafe.naver.com/prodba.cafe
http://blog.naver.com/chowstephen?Redirect=Log&logNo=10067319212
일단, 현재 CPU를 많이 소모하고 있는 세션과 그 쿼리를 찾는 방법은 무엇일까?
1. os명령어 top으로 현재 cpu를 많이 소모하고 있는 세션의 ospid를 알아낸다.
2. 다음의 쿼리로 해당 세션의 pid를 알아낸다.
SQL> select s.sid, s.serial#, p.spid
from v$session s, v$process p
where s.paddr=p.addr
and p.spid=<ospid>;
from v$session s, v$process p
where s.paddr=p.addr
and p.spid=<ospid>;
3. 2번에서 찾아낸 sid를 이용하여 SQL을 찾아낸다.
SQL> set long 1000
SQL> select a.sql_text from v$sqltext a, v$session b
where a.address=b.sql_address
and a.hash_value=b.sql_hash_value
and b.sid= <sid>
order by a.piece;
SQL> select a.sql_text from v$sqltext a, v$session b
where a.address=b.sql_address
and a.hash_value=b.sql_hash_value
and b.sid= <sid>
order by a.piece;
sqlplus에서 세션 kill하기
특정 세션을 죽이기 위한 SQL문은 다음과 같다.
SQL> alter system kill session '<SID>, <SERIAL#>' immediate;
이 SQL을 실행하게 되면 바로 그 세션이 죽는 것이 아니라, SMON에 의해서 롤백과 같은 작업이 진행된다.
(alert 로그를 보면 다음과 같은 메시지가 나온다. : SMON: Parallel transaction recovery tried)
참고 : http://cafe.naver.com/prodba.cafe
http://blog.naver.com/chowstephen?Redirect=Log&logNo=10067319212
'Oracle > Admin' 카테고리의 다른 글
[펌] DB link (0) | 2010.06.06 |
---|---|
[펌] TNS-12546: TNS:permission denied (0) | 2010.05.28 |
create index, index rebuild (0) | 2010.04.27 |
alert_SID.log (0) | 2010.03.24 |
index rebuild 작업 (0) | 2010.02.25 |