sql 을 운영하는데 업체에서 조회, 입력이 안된다고 연락이 왔습니다.
작업 모니터에서 확인을 해보니 특정 프로세스 ID 가 차단이 되는것을 확인 하였습니다. 차단 번호는 1 로 되어있었음.
그런데 이 프로세스 ID 가 작업상태를 보니 sleeping 상태 인데 차단 1 이 되어있는것은 무슨 현상인지 알 수가 없어 이렇게 글을
올리게 되었습니다.
프로세스를 강제로 연결을 끊기는 했는데 계속 발생하네요.
프로세스는 sleeping 인데 차단 1(차단주체프로세스)이 발생하는 경우가 보통 어떤 상황에서 발생하는지 알고 싶어 이렇게 글을 올립니다.
app 쪽에서 실행하는 코딩에서 문제가 발생할 수도 있는건지 아니면 단순히 접속하는 인원이 많아서 그런건지 알지 못해 이렇게 글을 올립니다. 보통 어떤 상황에 많이 걸리는거죠??? 혹시 이거에 대한 대비책 같은거 도 알려 주실 수 있으신지요???
소중한 답변 부탁드리겠습니다.ㅜ.ㅜ
Comment 1
-
catchv
2013.07.20 09:40
Client에서 연결해서 Transaction이 일어났지만 Timeout으로 중단 된 경우 이런 현상이 발생됩니다.
예를 들면
CREATE PROCEDURE usp_Test1
AS
BEGIN TRAN
INSERT INTO T11 VALUES(1)
WAITFOR DELAY '0:5:00'
ROLLBACK
이런 프로시져가 있다고 하고(최소 5분은 처리 해야 하는 쿼리)
Client에서 5분 전에 Timeout이 걸린다면 Lock이 걸린 상태로 프로시져가 종료가 됩니다.
해결 방법은
CREATE PROCEDURE usp_Test1
AS
SET XACT_ABORT ON
BEGIN TRAN
INSERT INTO T11 VALUES(1)
WAITFOR DELAY '0:5:00'
ROLLBACK
XACT_ABORT를 이용하여 에러가 발생될 경우 Transaction을 자동 롤백되게 하여 수정 할 수 있습니다.
-- catchv