잠금 요청 제한시간이 초과되었습니다.(Lock request time out period exceeded)


MSSQL 테이블을 처리하는 과정에서 예기치 않은 오류가 발생할 때가 가끔 있습니다.

잠금 요청 제한시간이 초과되었습니다.(Lock request time out period exceeded)“라는 오류도 그 중에 하나입니다.

이번 글에서는 MSSQL에서 잠금 요청 제한시간이 초과되었습니다.(Lock request time out period exceeded) 오류에 대할 해결 방법에 대해 알아보겠습니다.

잠금 요청 제한시간이 초과되었습니다.(Lock request time out period exceeded) 오류 발생 원인

MS SQL에서 “잠금 요청 제한시간이 초과되었습니다.(Lock request time out period exceeded)” 오류는 다양한 작업 과정에서 발생할 수 있습니다.

  • 트랜잭션의 영구 롤백으로 인해 오류가 발생합니다.
    트랜잭션이 Commit 되기 전에 작업이 강제 종료 된 경우 해당 트랜잭션은 계속해서 Lock 상태로 유지되게 됩니다.
  • 또는 Commit Transacion 이나 Rollback Transaction을 추가하지 않고 Transaction 시작 실행만 한 경우 다음 작업에서 해당 오류가 발생합니다.
  • 오래 지속되는 트랜잭션으로 인해 Lock 상태가 계속 유지되는 경우 해당 테이블에 대한 다른 작업을 처리하고자 할 때 오류가 발생합니다.

잠금 요청 제한시간이 초과되었습니다.(Lock request time out period exceeded) 오류 해결 방법

다양한 원인에 의해 발생하는 만큼 해결 방법도 다양하게 존재할 수 있습니다.

  • 가장 확실한 방법은 MS SQL 서비스를 다시 시작하는 것입니다.
    이 방법은 가장 확실하게 오류를 해결할 수 있는 방법이지만 MS SQL을 운영 중인 상황에서 서비스를 다시 시작하기에는 제약이 따를 수 밖에 없습니다. 결코 쉽게 사용할 수 있는 방법은 아닙니다.
  • 해당 Lock 된 프로세스를 찾아 강제로 프로세스를 종료(Kill) 해 주면 해결이 됩니다.

MSSQL 프로세스 강제 KILL 시키는 방법

아래 화면은 특정 테이블을 삭제하려고 할 때 “잠금 요청 제한시간이 초과되었습니다.(Lock request time out period exceeded)” 오류가 발생하는 화면입니다.

테이블을 삭제하기 전 테이블을 INSERT 하는 과정에서 강제로 프로그램이 종료되면서 잠금 상태에 있는 테이블을 삭제하려고 할 때 입니다.

잠금 요청 제한시간이 초과되었습니다.(Lock request time out period exceeded) 1

1. SQL Server Management Studio(SSMS)에서 EXEC sp_lock;을 실행해서 어떤 spid(프로세스 세션 ID)에서 문제가 발생하는지 확인을 해 봅니다.

  • EXEC sp_lock;

2. 그럼 아래 화면처럼 spid 번호 ’72’번처럼 계속 반복되는 spid를 발견할 수 있습니다. 이 spid가 문제의 spid 입니다.

잠금 요청 제한시간이 초과되었습니다.(Lock request time out period exceeded) 2

3. spid를 강제 종료하기 전에 해당 spid가 어떤 것인지 확인을 합니다.

  • DBCC INPUTBUFFER(72)로 확인이 가능합니다. 해당 psid는 INSERT 처리 중에 있는 spid 임을 알 수 있습니다.
잠금 요청 제한시간이 초과되었습니다.(Lock request time out period exceeded) 3

4. 문제가 되는 spid를 강제로 종료(kill) 시킵니다.

  • KILL 72 : KILL은 프로세스를 강제 종료 시키는 명령어이고, 72는 spid 번호 입니다.
잠금 요청 제한시간이 초과되었습니다.(Lock request time out period exceeded)

이제 더 이상 잠금 요청 제한 시간 오류가 발생하지 않게 됩니다.

마무리

KILL 명령어를 사용하여 강제로 프로세스 ID를 종료하는 경우 해당 프로세스 ID가 종료해도 되는 것인지 잘 파악해야 합니다.
정상적인 프로세스를 실수로 강제 종료를 하게 되면 예기치 않은 테이블 간의 데이터 불일치가 발생할 수 있습니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기