SQL Server 관리자 분들에게 도움이 되는 중요한 내용이라 퍼왔습니다.
마이크로소프트에서 기술 지원을 하고 계신 한기환님 블로그에서 가져왔습니다.
http://optimizer.tistory.com/entry/KILL-UOW
(기환님 메시지 남기고 펐어요! ^^)
아래 본문입니다.
------------------------------------------------------------------------
2008/04/14 23:36
[공장이야기]
KILL을 처음 접했을 때 '죽인다는 표현을 꼭 썼어야 했을까?'라는 의구심을 갖었었다. 지금은 'KILL이 없으면 서비스를 재시작해야 하나?' 라는 반문 때문에 감사하며 쓰고 있다. 하지만, KILL로도 죽지 않는 생명력 강한 트랜잭션 있으니, 분리된(orphaned) 분산 트랜잭션이 바로 여기에 속한다. 관리자의 입장에서 보면 이러한 분산트랜잭션은 아주 골치가 아닐 수 없다. 그렇다면 해결책은 무엇인가? 그렇다. 재시작하면 깔끔히 사라진다. :-), 재시작없이 해당 세션을 종료할 수 있는 방법을 소개하려는 것이 이 글의 목적이다.
[문제]
사용되지 않는 분리된 분산트랜잭션용 세션(SPID=-2)이 sysprocesses에서 확인되었다. 서비스 재시작없이 이 세션을 종료시키고자 한다.
[해결]
다음 절차에 따라 분리된 분산트랜잭션을 KILL 시킬 수 있다.
1) 분리된 분산트랜잭션 확인
분리된 분산트랜잭션은 실제 세션ID에 연결되어 있지 않고 인위적으로 -2라는 값을 갖는다.
select * from sys.dm_exec_sessions WHERE Session_ID = '-2';
2) 분리된 분산트랜잭션의 작업단위(UOW:Unit Of Worker) 확인
UOW는 sys.dm_tran_locks 동적 관리 뷰의 request_owner_guid 열에서 가져올 수 있는 GUID이다.
select request_owner_guid, * from sys.dm_tran_locks where request_session_id = '-2';
3) KILL UOW
분산트랜잭션이 아닌 경우 UOW값은 00000000-0000-0000-0000-000000000000 으로 나타난다.
다음은 UOW값을 'D5499C66-E398-45CA-BF7E-DC9C194B48CF'라고 가정하고 KILL하는 예이다.
KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF'
또는 구성 요소 서비스(dcomcnfg)에서도 미결 분산트랜잭션을 종료할 수 있다.
"관리도구 - 구성 요소 서비스 - 내 컴퓨터 - 분산 트랜잭션 코디네이터 - 트랜잭션 목록"까지 선택 후,
오른쪽 화면의 목록 중 "작업 ID 단위"값이 위에서 확인한 UOW 값과 같은 분산 트랜잭션을 확인한다.
해당 분산 트랜잭션에서 오른 클릭 후 "해결"메뉴에서 "커밋:중단:무시" 중 "중단" 선택
[참조]
1. KILL (SQL Server 2005 BOL)
http://technet.microsoft.com/ko-kr/library/ms173730.aspx
2. 특정 세션ID 롤백되고 있는 경우에 진행율 확인하기
세션ID 54를 KILL하여 롤백중인 상태라면 다음과 같이 확인 가능하다
KILL 54 WITH STATUSONLY;
3. 특정 SPID에 대해 롤백이 진행 중인 경우 특정 SPID에 대한 sp_who 결과 집합의 cmd 열에 KILLED/ROLLBACK이 표시된다.
4. SQL Server 2000에서는 다음과 같이 syslockinfo의 req_transactionUOW컬럼각으로 UOW를 확인한다.
select req_transactionUOW, * from syslockinfo where spid='-2'
HTH,
한기환
[출처] [펀글] KILL UOW, 제발 사라져 줘~|작성자 김정선
'데이터베이스 > SQL Server' 카테고리의 다른 글
변경된 Plan Caching 동작 (0) | 2008.04.29 |
---|---|
차집합 구하기, 어떤 쿼리가 좋을까? (1) | 2008.04.29 |
암시적 소유자로 인한 CacheMiss 한 방에 해결하기 (0) | 2008.04.29 |
사용된 명령어 정리 (0) | 2008.04.29 |
sp_depends (0) | 2008.04.29 |