'transaction lock'에 해당되는 글 1건

  1. 2013.07.15 SQL Server Transaction Blocking 문제 해결
MS SQL2013.07.15 17:00

 

[내용]

 

어떤 데이터를 조회하려고 하는데, 다른 트랜잭션에 의해서 잠겨 있을 경우 무한정 기다려야 합니다. 이러한 이슈상황을 만들어 보고 해결하는 방법을 확인해 보겠습니다.

 

 

[환경]

 

OS: Windows Server 2012

Product: SQL Server 2012

 

 

[장애 발생 시나리오]

 

--테스트를 위한 DB 테이블을 생성합니다.

USE master

GO

 

CREATE DATABASE tranDB

GO

 

USE tranDB

GO

 

CREATE TABLE tranTbl(

Id NVARCHAR(6),

Name NVARCHAR(6)

)

GO

 

INSERT INTO tranTbl VALUES (N'T0001', N'마이쮸');

 

-- 세션1에서 기존 데이터를 변경하려는 쿼리문을 실행합니다.

BEGIN TRANSACTION

UPDATE tranTbl

SET Name=N'하이츄'

WHERE Id=N'T0001'

WAITFOR DELAY '00:05:00' -- 5분동안 쿼리문 실행

ROLLBACK TRAN

GO

 

-- 세션2에서 단독잠금 되어 있는 행을 조회 합니다.

SELECT * FROM tranTbl;  --Blocking 발생

 

 

[ACTION]

새로운 쿼리창에서 아래 스크립트를 실행 시켜 Block 걸고 있는 세션과 걸린 세션을 확인합니다.

SELECT * FROM sys.sysprocesses;

 

* 정보

1. Block으로 차단된 세션: 55

2. Block 걸고 차단한 세션: 54

3. 데이터베이스 ID: 15

 

해당 데이터베이스가 어떤 것인지 확인해 봅니다.

SELECT DB_NAME(15);

 

 

Block 걸고 있는 세션의 쿼리문을 확인합니다.

DBCC INPUTBUFFER(54);

 

 

Block 걸고 있는 세션의 중요성을 판단하여, 세션을 종료 시킵니다.

KILL 54;

 

 

KILL명령어를 실행하면, Block 걸던 세션을 서버와의 연결이 끊어집니다.

 

 

Block으로 실행되지 못했던 쿼리는 정상적으로 실행이 됩니다.

 

 

 

[참고]

 

http://support.microsoft.com/kb/224453

 

 

신고
Posted by TM ~ing