Oracle/Admin2010. 5. 21. 22:22
한 세션에서 쿼리를 수행하는데 아주 많은 CPU를 사용한다면 그 세션을 일단 찾아서 kill시켜야 한다.

일단, 현재 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>;


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;



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
Posted by 자수성가한 부자