Tip
2010.04.09 10:24

SESSION KILL에 대하여

조회 수 13381 추천 수 0 댓글 0

ALTER SYSTEM KILL SESSION 에 대하여

--- Problem

사용자는 다음과 같은 상황에서 session 을 kill 하려는 시도를 하게 된다.

1. os 에는 process 가 존재하지 않지만, v$session 에는 active 로 존재하고
있을 경우
2. shadow process 는 살아 있는데, client machine 을 rebooting 한 경우
3. session 이 걸고 있던 lock 을 release 해야 할 경우
4. OS 나 Oracle 의 자원을 지나치게 많이 사용하여 성능을 저하시키는
   process

그런데, alter system kill session 'sid, serial#'; 후에 다음과 같은
에러가 발생할 경우가 있다.

ora-00030, 00000, "user session ID does not exist"
// *Cause:  The user session id no longer exists, probably because the
//          session was logged out.
// *Action: Use a valid session ID.

--- 원인과 대책

kill session을 할 수 없는 이유는 PMON이 이미 이 session을 delete하고 있는
중이기 때문이다. 즉, PMON 이 dead session 을 clean-up 하고 있는 중에는
serial number의 값이 증가한다.

문제는 PMON이 process를 kill하는 시간인데, transaction의 크기에 따라,
PMON의 rollback 시간이 결정된다. 먼저 PMON은 dead process를 찾아내어,
이 process가 사용한 resource 를 release하는 시도를 한다.
PMON은 계속 이 작업을 시도하다가 마침내, free buffer의 부족으로 더 이상
resource를 free-up 하지 못하게 된다.
이 때, 이 process를 delete하고 있다는 message를 trace file에 출력하는데,
이것은 process를 delete하는 데 필요한 resource(data cache 내의 free buffer)
의 부족으로 위의 작업이 지연되고 있다는 의미이다.

PMON이 process 를 clean-up 할 때 걸리는 시간은, 5분에서 24 시간까지 소요
될 수 있다. 문제는 이 process가 hold 하고 있는 lock으로 인해 특정 작업이
수행되지 못하는 데 있다.  MTS 를 사용할 때는 configuration MTS setting,
sqlnet.expire_time 사용)에 따라 다르지만, clean-up 작업을 하는데 72 시간이
소요된 경우도 있다.

아직까지는 PMON이 작업을 마칠 때까지 기다리는 방법 또는 db를 restartup하는
방법 밖에는 없다.

--- PMON 의 작업

PMON은 network failure 나 기타의 원인으로 생긴 old process connection을
clean-up 하는 역할을 한다. 그런데, PMON 은 clean-up 해야 하는 connection
중에 정해진 개수 만큼의 transaction 을 rollback 할 수 있는데, 이 값은
initSID.ora 의 cleanup_rollback_entries(default = 20) 에 의해 결정된다.
예를 들어, 1000 개의 uncommitted update가 있다면, 일정한 시간마다
cleanup_rollback_entries 의 개수 만큼의 record 만 rollback 할 수 있으므로
이 작업 동안에 lock 은 그대로 유지된다.


PMON 은 위의 작업 이외에 DB maintenance 역할이 있으므로, 위의 rollback 이
비교적 빠르게 처리되지 못할 수도 있다. 이러한 rollback을 빠르게 처리하기
위하여 cleanup_rollback_entries 를 늘릴 수도 있다. 그러나, 그 만큼 일정
시간 동안 PMON 의 작업이 많아지게 되므로, 다른 사용자들의 작업 요청이
느려지게 되는 trade-off 가 있으므로, 신중히 고려한 후에 수정하는 것이
바람직하다.

alter system kill session 에 의해서도 위와 같이 rollback 이 이루어지는데,
이 session 이 완전히 clean-up 되기 전까지 v$session, v$process에 남아 있게
된다.

--- ALTER SYSTEM KILL SESSION 을 하기 전에 ...

kill session 을 원할 경우는 다음의 순서대로 작업하는 것이 좋다.

1. kill the user process first
2. wait for 3 - 4 minutes
3. query v$session
4. if any information find in v$session, query v$lock
   like
   select count(*) from v$lock where SID ='sid';

위의 count(*) 가 0 이 아니라면, 아직 PMON 이 rollback을 끝내지 못한 경우
이므로 다시 얼마 후에 v$lock 을 조회하여 lock 의 개수가 감소하였는지
반복적으로 확인한다.
만약, 이 값이 전혀 변하지 않았다면, ALTER SYSTEM KILL SESSION 을 수행하고
v$session, v$lock을 query 하여 변화가 있는지 확인하여 변화가 있다면,
좀 더 기다린다.

그래도, v$lock 의 count(*) 가 0 이 되지 않을 경우, 마지막으로 수행할 수
있는 유일한 방법은 instance 를 restartup 하는 것이다.


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 Q&A Oracle관련 게시물만 Sean 2014.04.09 84839
80 Tip 10G rollback시간 예상하기 고구마 2010.04.09 15155
» Tip SESSION KILL에 대하여 고구마 2010.04.09 13381
78 Tip Trace Event 세팅 고구마 2010.04.09 17285
77 Tip 영역할당해제 고구마 2010.04.09 11469
76 Tip INDEX 사용여부 확인하기 고구마 2010.04.09 19101
75 Tip Log miner 사용방법 1 김준호 2010.04.06 29847
74 Tip 화일의 손상 여부를 확인하는 dbv 사용 방법 김준호 2010.04.06 18477
73 Tip shared pool wait event 2 file 유주환 2010.04.05 28881
72 Tip SHRINK 와 MOVE 의 특징 김준호 2010.03.31 13630
71 Tip Windows Server 2008 (64bit) - Oracle 10g 설치 file 김준호 2010.03.29 20682
70 Tip TABLESPACE FREESPACE 조회하기 1 고구마 2010.05.19 16657
69 Tip UDP Buffer Tuning 기법 3 김준호 2010.05.04 30852
68 Tip TM과 TX 락 1 유주환 2010.04.30 19020
67 Tip 오라클 튜닝 세미나 자료(IO) 1 file 고구마 2010.04.28 13927
66 Tip 오라클 튜닝 세미나자료 (메모리) file 고구마 2010.04.28 14662
65 Tip SQL수행 처리 절차 고구마 2010.04.28 20809
64 Tip show space 고구마 2010.04.28 16767
63 Tip (Diagnostics) Oracle10g DB 접속 안될때 sqlplus 에서 SYSTEMSTATE DUMP 받기 1 고구마 2011.05.18 28946
62 Tip 10g standard edition과 enterprise edition의 차이점 2 윤현 2011.05.16 26017
61 Tip 윈도우에서 일정기간 지난 파일 및 폴더 자동삭제 하기 1 송기성 2011.03.31 21211
Board Pagination Prev 1 2 3 4 5 6 7 8 Next
/ 8