none
Kill 후 KILLED/ROLLBACK 으로 계속 남아 있습니다. RRS feed

  • 질문

  • 최근에 서비스팩 4로 업그레이드를 하였는데

    이후 부터 CLient의 DB Connection 후 비정상적인 종료를 할경우

    Client의 SPID가 프로세스가 죽지 않고 계속 살아 있는 현상이 발생하고 있습니다.

    (해당 Table에 Lock을 잡지는 않는 것 같습니다. )

    문제는 해당 SP 를 Kill 을 하면 KILLED/ROLLBACK 으로 죽지 않는 다는것입니다.

    Kill을 한번 더 하면 이렇게 표시가 됩니다.

    SPID 117: 트랜잭션 롤백이 진행 중입니다. 예상 롤백 완료율은 100%, 남은 시간은 0초입니다.

    즉 Rollback은 다 되었다는 이야기 인데..

    계속해서 해당 SP 가 살아 있어  Index 수정/삭제 시 Lock이 발생합니다.

    해당 테이블의 insert /update/delete 는 문제가 없습니다.
    2007년 1월 1일 월요일 오후 11:26

답변

  • 관리도구 > 구성요소서비스 > 분산 트랜잭션 코디네이터 > 트랜잭션 목록에 확인을 하였는데

    한개도 없습니다.

     MS에 Case를 Open 하여 확인 결과 BUG 라고 합니다.

     

    현재 2187이 최신인데 다음 버젼을 주면서 패치를 하라고 합니다.

    그런데 설치를 하지는 않았습니다. (아직 정식 버젼이 아니라고 해서)

    2007년 1월 4일 목요일 오전 12:46

모든 응답

  • - 링크드서버는 있나요? (View)
    - xp_cmdshell과 연관된 Job이 있나요?
      예) XP_cmdshell에의해 Spawn된 CMD.exe이 있다면 TaskManager에서 Kill해야만
             관련 Spid가 종료됩니다.
    - SPid 117에 해당하는 프로세스의 Job이 뭔가요? Rollback할 당시의 CPU나 I/O를 살펴보시고
      해당작업을 확인할 필요가 있습니다.

    SP4 reports queries blocking on themselves?
    http://groups-beta.google.com/group/microsoft.public.sqlserver.server/msg/b86e343e513ab281?hl=en

     

    2007년 1월 2일 화요일 오전 12:01
  • 이상하게 들리시겠지만 실행한 Client를 재부팅을 하여도

    DB의 SPID는 계속해서 살아 있습니다.

    DB를 restart 하면 당여히 사라집니다.

    그리고 http://www.jskwak.pe.kr/spid.txt 에서 sp_blocker_pss80 한 결과를 첨부 하였습니다.

    2007년 1월 2일 화요일 오전 12:54
  • - reTry Using Aba_Lockinfo

    aba_lockinfo is a stored procedure that provides information about processes and the locks they hold.
    Aba_lockinfo is designed to gather as much situation about a blocking situation as possible, so that you can
    instantly find the culprit, and kill blocking process if the situation is desperate.

    Then you can sit back and analyse the output from aba_lockinfo to understand how the blocking
    situation arose, so that you can take precautions to prevent it from reoccurring. The output from aba_lockinfo
    shows all active process as well as passive processes with locks, which objects they lock and their last command.
    The most recent version even gives you the currently running stored procedure and the the current
    statement within that procedure. (Requires SQL 2000 SP3.)

    http://www.sommarskog.se/sqlutil/aba_lockinfo.html

    - Connection pooling 을 쓰는것은 아닌가요?
      ADO Connection은 클라이언트 연결이 끊어지더라도 60초정도
      커넥션을 유지합니다. (MDAC Books Online을 참고하세요)

    2007년 1월 2일 화요일 오전 1:06
  • 많은 도움을 주셔서 감사합니다.

    현재 그 SPID를 내부적으로 "좀비" 라고 부르고 있는데 DB를 restart 할수가 없기 때문에 10일이 지난 지금도 계속해서 rollback 상태 입니다.

    현재는 2개의 SPID가 있는 상태이며 Client 들은 2~4차례 재부팅을 한 상태 입니다.

    restart 말고는 답이 없나요....

    현재 이렇게 계속 놓아 두는 이유는 DB 정기 점검때 까지 기다리고 있고 있습니다.

    2007년 1월 2일 화요일 오전 8:10
  • - DB서버의 Master > sysprocesses 테이블의 Spid, Hostname 컬럼으로 서치해서
      관련된 Client의 Application Process 를 종료하셔야 합니다.

    - select 'kill  '+convert(char,spid) +char(10)+'go' from master..sysprocess
       where status like 'rollback%'

    이 방법이 실패할경우에는
    SQL 서버 서비스를 리스타트하는 방법밖에는
    없는걸로 알고 있습니다^^;;


     

    2007년 1월 2일 화요일 오전 8:52
  • 혹 해당 SPID가 DTC 트랜잭션에 포함되어 있는지 확인 바랍니다.

    관리도구 > 구성요소서비스 > 분산 트랜잭션 코디네이터 > 트랜잭션 목록에 트랜잭션이 남아 있는지 확인하시면 됩니다.

    만일 위 목록에 트랜잭션이 존재한다면 DTC 통신에 문제는 없는지 체크해보시고 DB쪽 DTC 서비스만 재시작해보시길 바랍니다.

     

    2007년 1월 3일 수요일 오전 5:50
  • 관리도구 > 구성요소서비스 > 분산 트랜잭션 코디네이터 > 트랜잭션 목록에 확인을 하였는데

    한개도 없습니다.

     MS에 Case를 Open 하여 확인 결과 BUG 라고 합니다.

     

    현재 2187이 최신인데 다음 버젼을 주면서 패치를 하라고 합니다.

    그런데 설치를 하지는 않았습니다. (아직 정식 버젼이 아니라고 해서)

    2007년 1월 4일 목요일 오전 12:46