Programming/MSSQL
MSSQL 데드락 그래프
장형이
2023. 2. 3. 00:15
MSSQL에서 데드락 그래프를 뽑는 방법을 기록한다.
1. SSMS를 이미 설치해 놨다면, 아마도 깔려 있을 SQL Server Profiler 18을 실행한다.
2. [파일] -> [새 추적]을 누른다.
3. 접속 정보를 확인하고 연결 한다.
4. [이벤트 선택] -> [Locks] -> [Deadlock graph]를 체크한 다음 [실행]을 누른다.
5. 아래와 같이 창이 떴다면 이제 데드락을 일으켜 보자.
-- 테스트 테이블 세팅
CREATE TABLE Test1
(
uid BIGINT,
item1 Varchar(10),
item2 Varchar(10),
item3 Varchar(10),
CONSTRAINT PK_TEST1 PRIMARY KEY (uid)
)
GO
INSERT INTO dbo.Test1 VALUES (1, '1', '1', '1')
INSERT INTO dbo.Test1 VALUES (2, '1', '1', '1')
먼저 위와 같은 쿼리로 테스트 테이블을 만들어 데이터들을 세팅한다.
-- 1번 프로세스
BEGIN TRAN
UPDATE dbo.Test1 SET item1 = '1' WHERE uid = 1
WAITFOR DELAY '0:0:3'
UPDATE dbo.Test1 SET item1 = '1' WHERE uid = 2
COMMIT TRAN
-- 2번 프로세스
BEGIN TRAN
UPDATE dbo.Test1 SET item1 = '1' WHERE uid = 2
WAITFOR DELAY '0:0:3'
UPDATE dbo.Test1 SET item1 = '1' WHERE uid = 1
COMMIT TRAN
이후 2개의 프로세스에서 동시에 데드락 유발 쿼리를 실행시킨다.
6. 아래와 같이 그래프가 나오고 어떤 쿼리에서 발생했는지 확인이 가능하다.
7. 우클릭을 하여 파일로 뽑을 수 있다. 이 파일을 SSMS로 실행시키면 그래프를 다시 그려 볼 수 있고, 텍스트 에디터로 보면 좀 더 자세하게 볼 수 도 있다.
데드락 그래프 외에도 데드락을 분석할 때 Lock:Acquired, Lock:Released와 같은 유용한 이벤트들이 있으니 MSSQL로 개발을 한다면 필히 알아야 할 것 같다.