데이터베이스

Total 205
Today 0
profile_image
슈퍼아이피
10-07-05 15:38 5개 9,951회
MSSQL
MS-SQL-좀비 프로세스 해결방법 - lock
스케줄 도는 프로시저를 맹글다가 버그가 있는 바람에 스케줄 도는거 실패나고.. ;; 해당 프로세스 찾아서 kill로 죽여도 죽지 않는 좀비 프로세스가 돼 버린 경우!!!
순서

  1. sp_who와 sp_lock를 사용해 lock이 걸려있는 프로세스를 찾고 (mode 가  X 인 것)

  2. sp_inputbuffer(spid) 를 이용해 해당 쿼리가 뭔지도 확인해보는 센스...

  3. 그러구 죽일 만한 놈들은 죽여버린다. kill spid with statusonly (요건 프로세스 상태 보는거)



데드락이 자꾸 걸리거나 하는 경우 안생기게 하는게 최선이겠지만, 일단 벌어진 상태라믄... 급한 김에

  select @@lock_timeout 으로 lock 해제 timeout값이 어떻게 설정되어 있는지 확인한 담에
  set lock_timeout [time_period] 값으로 자동 롤백 타임아웃 값을 설정해준다..

  이렇게 해서 해결을 했는데..

잘못해서 "트랜잭션 롤백이 진행 중입니다. 예상 롤백 완료율은 100%, 남은 시간은 0초입니다." 요딴 식으로 메세지가 자꾸 나오고 해당 프로세스도 삭제가 안되는 경우가 MS 에서 얘기한 좀비 버그가 된 것이다..

요럴 때는 먼저

관리도구 -->  구성요소 서비스 --> 분산트랜잭션 코디네이터 --> 트랜잭션 목록에서 안지워졌던 프로세스들이 있는지 확인하고.. (얘네들이 좀비..)  

  서비스에서 Distributed Transaction Coordinator 서비스를 재시작~

추천 0 비추천 0

댓글목록

슈퍼아이피님의 댓글

profile_image
슈퍼아이피 작성일

sp_who 는 master db 에 있는 sysprocesses 테이블을 습니다.

그 테이블을 select 해 보시면 여러가지 데이타가 나오죠.
그중에서 blocked column 이 sp_who 에서의 blk column 입니다.
저는 주로 아래의 쿼리로 blocked 된 프로세스와, block 을 야기한느 프로세스를 찾습니다.
blocked column 은 지금의 spid 프로세스를 블럭 하고 있는 원인이 되는 프로세스입니다.

select * from master.dbo.sysprocesses where blocked != 0 and spid != blocked

그리고 한가지더, 저희 DB 도 블럭이 걸려서 아는데, 가능하면 테이블을 작게 디자인을 하거나, 동시에 access 하는 걸 줄이세요.
그거 불가능하다면, 자동으로 blocking process 를 kill 하는 job 을 만들어서 scheduled job 으로 돌리시는 게 좋겠어요.

슈퍼아이피님의 댓글

profile_image
슈퍼아이피 작성일

sp_lock
sp_who
dbcc inputbuffer(55) --명령 보기
kill 61

슈퍼아이피님의 댓글

profile_image
슈퍼아이피 작성일

다음 예제는 잠금 제한 시간을 1,800밀리초로 설정합니다.

SET LOCK_TIMEOUT 1800 GO

슈퍼아이피님의 댓글

profile_image
슈퍼아이피 작성일

슈퍼아이피님의 댓글

profile_image
슈퍼아이피 작성일