데드락이 발생할 때 원인을 분석하는 방법은 여러가지가 있지만,
가장 좋은 방법은 추적플래그 1204를 설정하는 것이다.
현상이 언제 재현될지도 데드락을 미리 준비해놓을 수도 있고, 원인분석도 확실하다.
사용방법은 간단하다.
쿼리분석기에서 다음의 쿼리를 실행시킨다.
이 플래그는 일단 한번 실행되면 전역으로 영향을 미친다.
DB 서버 옵션에서 DB 시작시마다 자동으로 실행되도록 할 수도 있다.
추적플래그가 설정된 이후에 데드락이 발생하면 트레이스 결과가 DBMS 설치경로 밑의 LOG 폴더에 ERRORLOG 파일에 기록된다.
다음은 기록된 로그파일의 예다. 데드락이 발생한 시간, SPID, 데드락을 유발시킨 SQL문 등 원인파악에 필요한 정보들이 기록되어 있다.
가장 좋은 방법은 추적플래그 1204를 설정하는 것이다.
현상이 언제 재현될지도 데드락을 미리 준비해놓을 수도 있고, 원인분석도 확실하다.
사용방법은 간단하다.
쿼리분석기에서 다음의 쿼리를 실행시킨다.
DBCC TRACEON(1204, -1)
이 플래그는 일단 한번 실행되면 전역으로 영향을 미친다.
DB 서버 옵션에서 DB 시작시마다 자동으로 실행되도록 할 수도 있다.
추적플래그가 설정된 이후에 데드락이 발생하면 트레이스 결과가 DBMS 설치경로 밑의 LOG 폴더에 ERRORLOG 파일에 기록된다.
다음은 기록된 로그파일의 예다. 데드락이 발생한 시간, SPID, 데드락을 유발시킨 SQL문 등 원인파악에 필요한 정보들이 기록되어 있다.
2008-08-17 19:31:31.83 spid4
Deadlock encountered .... Printing deadlock information
2008-08-17 19:31:31.83 spid4
2008-08-17 19:31:31.83 spid4 Wait-for graph
2008-08-17 19:31:31.83 spid4
2008-08-17 19:31:31.83 spid4 Node:1
2008-08-17 19:31:31.83 spid4 KEY: 7:1608392799:2 (02005a9fb1b0) CleanCnt:2 Mode: X Flags: 0x0
2008-08-17 19:31:31.83 spid4 Grant List 0::
2008-08-17 19:31:31.83 spid4 Owner:0x2825f6e0 Mode: X Flg:0x0 Ref:0 Life:02000000 SPID:53 ECID:0
2008-08-17 19:31:31.83 spid4 SPID: 53 ECID: 0 Statement Type: UPDATE Line #: 1
2008-08-17 19:31:31.83 spid4 Input Buf: Language Event: UPDATE UPDATE_TAB
SET MANAGE = 0
WHERE MANAGE = 1
2008-08-17 19:31:31.83 spid4 Requested By:
2008-08-17 19:31:31.83 spid4 ResType:LockOwner Stype:'OR' Mode: U SPID:52 ECID:0 Ec:(0x295CF520) Value:0x28221de0 Cost:(0/2FC)
2008-08-17 19:31:31.84 spid4
2008-08-17 19:31:31.84 spid4 Node:2
2008-08-17 19:31:31.84 spid4 PAG: 7:1:5647 CleanCnt:2 Mode: X Flags: 0x2
2008-08-17 19:31:31.84 spid4 Grant List 0::
2008-08-17 19:31:31.84 spid4 Owner:0x282202e0 Mode: X Flg:0x0 Ref:1 Life:02000000 SPID:52 ECID:0
2008-08-17 19:31:31.84 spid4 SPID: 52 ECID: 0 Statement Type: UPDATE Line #: 1
2008-08-17 19:31:31.84 spid4 Input Buf: Language Event: UPDATE TEST_TAB
SET MANAGE = 0
WHERE MANAGE = 1
2008-08-17 19:31:31.84 spid4 Requested By:
2008-08-17 19:31:31.84 spid4 ResType:LockOwner Stype:'OR' Mode: U SPID:53 ECID:0 Ec:(0x292E5520) Value:0x2824b380 Cost:(0/18C4)
2008-08-17 19:31:31.84 spid4 Victim Resource Owner:
2008-08-17 19:31:31.84 spid4 ResType:LockOwner Stype:'OR' Mode: U SPID:52 ECID:0 Ec:(0x295CF520) Value:0x28221de0 Cost:(0/2FC)
Deadlock encountered .... Printing deadlock information
2008-08-17 19:31:31.83 spid4
2008-08-17 19:31:31.83 spid4 Wait-for graph
2008-08-17 19:31:31.83 spid4
2008-08-17 19:31:31.83 spid4 Node:1
2008-08-17 19:31:31.83 spid4 KEY: 7:1608392799:2 (02005a9fb1b0) CleanCnt:2 Mode: X Flags: 0x0
2008-08-17 19:31:31.83 spid4 Grant List 0::
2008-08-17 19:31:31.83 spid4 Owner:0x2825f6e0 Mode: X Flg:0x0 Ref:0 Life:02000000 SPID:53 ECID:0
2008-08-17 19:31:31.83 spid4 SPID: 53 ECID: 0 Statement Type: UPDATE Line #: 1
2008-08-17 19:31:31.83 spid4 Input Buf: Language Event: UPDATE UPDATE_TAB
SET MANAGE = 0
WHERE MANAGE = 1
2008-08-17 19:31:31.83 spid4 Requested By:
2008-08-17 19:31:31.83 spid4 ResType:LockOwner Stype:'OR' Mode: U SPID:52 ECID:0 Ec:(0x295CF520) Value:0x28221de0 Cost:(0/2FC)
2008-08-17 19:31:31.84 spid4
2008-08-17 19:31:31.84 spid4 Node:2
2008-08-17 19:31:31.84 spid4 PAG: 7:1:5647 CleanCnt:2 Mode: X Flags: 0x2
2008-08-17 19:31:31.84 spid4 Grant List 0::
2008-08-17 19:31:31.84 spid4 Owner:0x282202e0 Mode: X Flg:0x0 Ref:1 Life:02000000 SPID:52 ECID:0
2008-08-17 19:31:31.84 spid4 SPID: 52 ECID: 0 Statement Type: UPDATE Line #: 1
2008-08-17 19:31:31.84 spid4 Input Buf: Language Event: UPDATE TEST_TAB
SET MANAGE = 0
WHERE MANAGE = 1
2008-08-17 19:31:31.84 spid4 Requested By:
2008-08-17 19:31:31.84 spid4 ResType:LockOwner Stype:'OR' Mode: U SPID:53 ECID:0 Ec:(0x292E5520) Value:0x2824b380 Cost:(0/18C4)
2008-08-17 19:31:31.84 spid4 Victim Resource Owner:
2008-08-17 19:31:31.84 spid4 ResType:LockOwner Stype:'OR' Mode: U SPID:52 ECID:0 Ec:(0x295CF520) Value:0x28221de0 Cost:(0/2FC)
'SQL Server' 카테고리의 다른 글
여러개의 테이블에서 JOIN하여 UPDATE 및 DELETE하는 SQL (5) | 2008.08.21 |
---|---|
MAX, COUNT등 GROUP함수 사용시 주의할 점 (1) | 2008.08.17 |
INSERT문 실행 후 INSERT된 IDENTITY를 확인하는 방법 (1) | 2008.08.15 |
SQL Server의 SQL문에서 이벤트로그 기록하기 (0) | 2008.03.17 |
UPDATE 비용에 대한 고찰 (1) (1) | 2008.03.17 |