안녕하세요.
운영중인 서버에 '교착상태'관련 에러가 자주 떠서 dbcc traceon(1204,-1)을 사용하여, 해당 로그를 캡처하였습니다.
일단 다음의 결과를 보긴 했는데, 저것이 무엇을 의미하는지 정확히 알기 힘들어서 질문글 올립니다.
관련 지식이 있으신분의 도움 부탁들립니다.
다음의 해당 로그의 내용입니다.
좀길긴한데, 쿼리관련 내용은 하단쪽에 있습니다.
하단에 보면 따로 주석달아놓긴 했는데, select ~~ update쿼리문이 로그에 잡히긴 합니다.
해당 쿼리에 문제가 있다는 내용인걸까요?..(서버실에 방문해서 해당 테이블의 인덱스등을 살펴볼 예정이긴 합니다.)
하단의 쿼리문제는 제쳐두고, 다른 인터넷 글들을 검색해보면 바로바로 쿼리가 로그에 찍히는거 같던데. 저같은 경우는 다음처럼,
로그가 쭉 찍히고 나서 상당히 뒤에 쿼리관련 로그가 나오는데요.
윗줄에 찍히는 내용들이 무엇을 의미하는지 알고 싶습니다.
하단에 나오는 쿼리관련 로그도 좀 자세한 설명을 알고싶기도 하고요...
질문이 장황한데... 충고말씀 부탁드립니다.
spid6s Deadlock encountered .... Printing deadlock information <--재앙이 시작됬다는거 같습니다. 서버에 쌓이는 교착상태관 련 에러메세지의 시간과도 거의 일치합니다.
spid6s Wait-for graph
spid6s NULL
spid6s Node:1
spid6s PAGE: 7:1:119807 CleanCnt:3 Mode:U Flags: 0x3
spid6s Grant List 1:
spid6s Owner:0x0000000123E48980 Mode: U Flg:0x40 Ref:0 Life:00000001 SPID:68 ECID:0 XactLockInfo: 0x0000000119C14B90
spid6s SPID: 68 ECID: 0 Statement Type: UPDATE Line #: 12
spid6s Input Buf: RPC Event: Proc [Database Id = 7 Object Id = 1670297010]
spid6s Requested by:
spid6s ResType:LockOwner Stype:'OR'Xdes:0x00000000805C7400 Mode: U SPID:76 BatchID:0 ECID:8 TaskProxy:(0x00000001AEEE3AE0) Value:0x149b6c40 Cost:(0/0)
spid6s NULL
spid6s Node:2
spid6s PAGE: 7:1:119807 CleanCnt:3 Mode:U Flags: 0x3
spid6s Wait List:
spid6s Owner:0x00000001149B6C40 Mode: U Flg:0x42 Ref:1 Life:00000001 SPID:76 ECID:8 XactLockInfo: 0x00000000805C7440
spid6s SPID: 76 ECID: 8 Statement Type: UPDATE Line #: 12
spid6s Input Buf: No Event:
spid6s Requested by:
spid6s ResType:LockOwner Stype:'OR'Xdes:0x00000000BD135130 Mode: U SPID:76 BatchID:0 ECID:1 TaskProxy:(0x00000001AEEE3840) Value:0x23850f80 Cost:(0/0)
spid6s NULL
spid6s Node:3
spid6s PAGE: 7:1:119784 CleanCnt:2 Mode:U Flags: 0x3
spid6s Grant List 3:
spid6s Owner:0x0000000115725F80 Mode: U Flg:0x40 Ref:0 Life:00000001 SPID:76 ECID:1 XactLockInfo: 0x00000000BD135170
spid6s SPID: 76 ECID: 1 Statement Type: UPDATE Line #: 12
spid6s Input Buf: No Event:
spid6s Requested by:
spid6s ResType:LockOwner Stype:'OR'Xdes:0x000000008001FA50 Mode: U SPID:68 BatchID:0 ECID:3 TaskProxy:(0x000000013D185700) Value:0x88cfeac0 Cost:(0/304)
spid6s NULL
spid6s Node:4
spid6s Port: 0x00000001B0766700 Xid Slot: 0, Wait Slot: -1, Task: 0x00000000008BF288, (Coordinator), Exchange Wait Type: e_waitPipeGetRow, Merging: 0
spid6s ResType:ExchangeId Stype:'AND' SPID:68 BatchID:0 ECID:0 TaskProxy:(0x0000000188EBA510) Value:0x8bf288 Cost:(0/10000)
spid6s NULL
spid6s Victim Resource Owner:
spid6s ResType:LockOwner Stype:'OR'Xdes:0x00000000805C7400 Mode: U SPID:76 BatchID:0 ECID:8 TaskProxy:(0x00000001AEEE3AE0) Value:0x149b6c40 Cost:(0/0)
spid6s Deadlock encountered .... Printing deadlock information
spid6s Wait-for graph
spid6s NULL
spid6s Node:1
spid6s RID: 15:1:26556:14 CleanCnt:2 Mode:X Flags: 0x3
spid6s Grant List 3:
spid6s Owner:0x00000000C3E66D40 Mode: X Flg:0x40 Ref:0 Life:02000000 SPID:52 ECID:0 XactLockInfo: 0x00000001641B7990
spid6s SPID: 52 ECID: 0 Statement Type: UPDATE Line #: 3
spid6s Input Buf: Language Event: if exists(SELECT * FROM test_tabl1 WHERE Co_Code + Bs_Code + Gr1_Code + Gr2_Code + It_Code = '0102020001' AND ResultDate = '20140318') UPDATE test_tabl1 SET It_Paycnt = '0' , It_Freecnt = '0' , It_Money = '0' , ModId = '김테스트' , ModD <--이 쿼리의 update에 문제가 있다는 얘기인가요?
spid6s Requested by:
spid6s ResType:LockOwner Stype:'OR'Xdes:0x00000000BD134CC0 Mode: U SPID:66 BatchID:0 ECID:0 TaskProxy:(0x000000016F05C538) Value:0x231d7d80 Cost:(0/188)
spid6s NULL
spid6s Node:2
spid6s RID: 15:1:26528:59 CleanCnt:2 Mode:X Flags: 0x3
spid6s Grant List 3:
spid6s Owner:0x00000000C41DBBC0 Mode: X Flg:0x40 Ref:0 Life:02000000 SPID:66 ECID:0 XactLockInfo: 0x00000000BD134D00
spid6s SPID: 66 ECID: 0 Statement Type: UPDATE Line #: 3
spid6s Input Buf: Language Event: if exists(SELECT * FROM test_tabl1 WHERE Co_Code + Bs_Code + Gr1_Code + Gr2_Code + It_Code = '0106010401' AND ResultDate = '20130110') UPDATE test_tabl1 SET It_Paycnt = '0' , It_Freecnt = '0' , It_Money = '0' , ModId = '테스트' , ModD
spid6s Requested by:
spid6s ResType:LockOwner Stype:'OR'Xdes:0x00000001641B7950 Mode: U SPID:52 BatchID:0 ECID:0 TaskProxy:(0x0000000116A2C538) Value:0xcd7b1240 Cost:(0/1060)
spid6s NULL
spid6s Victim Resource Owner:
spid6s ResType:LockOwner Stype:'OR'Xdes:0x00000000BD134CC0 Mode: U SPID:66 BatchID:0 ECID:0 TaskProxy:(0x000000016F05C538) Value:0x231d7d80 Cost:(0/188)
spid6s Deadlock encountered .... Printing deadlock information
spid6s Wait-for graph
spid6s NULL
spid6s Node:1
spid6s RID: 15:1:26494:46 CleanCnt:2 Mode:X Flags: 0x3
spid6s Grant List 3:
spid6s Owner:0x00000000CEB95A40 Mode: X Flg:0x40 Ref:0 Life:02000000 SPID:74 ECID:0 XactLockInfo: 0x00000001641B7990
spid6s SPID: 74 ECID: 0 Statement Type: DELETE Line #: 1
spid6s Input Buf: Language Event: (@Param1 nvarchar(2),@Param2 nvarchar(2),@Param3 nvarchar(2),@Param4 nvarchar(2),@Param5 nvarchar(2),@Param6 money,@Param7 money,@Param8 money,@Param9 nvarchar(9),@Param10 nvarchar(8),@Param11 nvarchar(1))DELETE FROM test_tabl1 WHERE (Co_Code = @Param
spid6s Requested by:
spid6s ResType:LockOwner Stype:'OR'Xdes:0x00000000A89CEE80 Mode: U SPID:62 BatchID:0 ECID:0 TaskProxy:(0x00000001B23C8538) Value:0xbed82e40 Cost:(0/188)
spid6s NULL
spid6s Node:2
spid6s RID: 15:1:26146:65 CleanCnt:2 Mode:X Flags: 0x3
Comment 6
-
이스트럭(강동운)
2014.05.26 17:58
-
kosaja
2014.05.26 19:14
이스트럭(강동운) 님 답변감사합니다.
그런데 저 문제가 있다고 나온 쿼리가 질의하는 DB랑 현재 교착상태가 발생했다고 나온 DB가 다른 DB입니다.
test_tab1이라는 테이블은 test1 DB에 있는 테이블 이고요.
교착상태가 발생했다는 에러가 발생한 디비는 test2 DB입니다.
이런경우가 있을 수 있는건가요?
아님 제가 잘못 파악을 하고 있는건지...
-
이스트럭(강동운)
2014.05.27 11:16
안녕하세요~~! 일단..1222로 로깅한 데이터를 주시면 좋을 것 같습니다 ^^
아래 동영상은 제가 작년 SQL Server 언플러그드에 데드락 주제로 발표한 영상입니다.
한번 보시면 도움이 되실 듯 합니다~~
감사합니다 ^^
-
kosaja
2014.05.27 11:36
이스트럭(강동운)님 답변 감사합니다.
말씀하신대로 1222도 추가하도록 하겠습니다.
강좌는 퇴근하는길에 꼭 보도록 하겠습니다.(회사컴엔 스피커가 없어서;;)
죄송스럽지만 이것을 봐주실 수 있으신가요?;;
1204로 로깅한 로그들은 다음과 같습니다.
=====
spid6s Deadlock encountered .... Printing deadlock information
spid6s Wait-for graph
spid6s NULL
spid6s Node:1
spid6s PAGE: 7:1:119807 CleanCnt:3 Mode:U Flags: 0x3
spid6s Grant List 1:
spid6s Owner:0x0000000123E48980 Mode: U Flg:0x40 Ref:0 Life:00000001 SPID:68 ECID:0 XactLockInfo: 0x0000000119C14B90
spid6s SPID: 68 ECID: 0 Statement Type: UPDATE Line #: 12
spid6s Input Buf: RPC Event: Proc [Database Id = 7 Object Id = 1670297010]
spid6s Requested by:
spid6s ResType:LockOwner Stype:'OR'Xdes:0x00000000805C7400 Mode: U SPID:76 BatchID:0 ECID:8 TaskProxy:(0x00000001AEEE3AE0) Value:0x149b6c40 Cost:(0/0)
spid6s NULL
spid6s Node:2
spid6s PAGE: 7:1:119807 CleanCnt:3 Mode:U Flags: 0x3
spid6s Wait List:
spid6s Owner:0x00000001149B6C40 Mode: U Flg:0x42 Ref:1 Life:00000001 SPID:76 ECID:8 XactLockInfo: 0x00000000805C7440
spid6s SPID: 76 ECID: 8 Statement Type: UPDATE Line #: 12
spid6s Input Buf: No Event:
spid6s Requested by:
spid6s ResType:LockOwner Stype:'OR'Xdes:0x00000000BD135130 Mode: U SPID:76 BatchID:0 ECID:1 TaskProxy:(0x00000001AEEE3840) Value:0x23850f80 Cost:(0/0)
spid6s NULL
spid6s Node:3
spid6s PAGE: 7:1:119784 CleanCnt:2 Mode:U Flags: 0x3
spid6s Grant List 3:
spid6s Owner:0x0000000115725F80 Mode: U Flg:0x40 Ref:0 Life:00000001 SPID:76 ECID:1 XactLockInfo: 0x00000000BD135170
spid6s SPID: 76 ECID: 1 Statement Type: UPDATE Line #: 12
spid6s Input Buf: No Event:
spid6s Requested by:
spid6s ResType:LockOwner Stype:'OR'Xdes:0x000000008001FA50 Mode: U SPID:68 BatchID:0 ECID:3 TaskProxy:(0x000000013D185700) Value:0x88cfeac0 Cost:(0/304)
spid6s NULL
spid6s Node:4
spid6s Port: 0x00000001B0766700 Xid Slot: 0, Wait Slot: -1, Task: 0x00000000008BF288, (Coordinator), Exchange Wait Type: e_waitPipeGetRow, Merging: 0
spid6s ResType:ExchangeId Stype:'AND' SPID:68 BatchID:0 ECID:0 TaskProxy:(0x0000000188EBA510) Value:0x8bf288 Cost:(0/10000)
spid6s NULL
spid6s Victim Resource Owner:
spid6s
ResType:LockOwner Stype:'OR'Xdes:0x00000000805C7400 Mode: U SPID:76 BatchID:0 ECID:8 TaskProxy:(0x00000001AEEE3AE0) Value:0x149b6c40 Cost:(0/0)
=====
검색을 해보면, 문제되는 쿼리나 sp를 찍어 준다고 하는데, 저 사이클안에는 해당 쿼리나 프로시저가 나오지도 않고 있습니다.
혹시 1222로 추적을 해야 쿼리가 정확히 나오는 것인가요?.
본문에 나와 있는 쿼리가 찍힌 로그는 제가 짜집기 한것입니다.
지금 판단해보니, 본문에 나와있는 쿼리의 데드락체킹은 웹서버에 찍힌 데드락과는 별개인것 같습니다.
-
이스트럭(강동운)
2014.05.27 17:58
안녕하세요~!
주신 정보로는 쿼리의 내용도 없어서.. 확인하기 어렵습니다. ㅠㅠ
감사합니다.
-
kosaja
2014.05.28 10:22
이스트럭(강동운)님 거듭 감사드립니다.
일단 1222로 추적을 다시 걸었습니다.
말씀하신 강좌도 짬을 내서 반드시 들어보도록 하겠습니다.
답변 다시한번 감사합니다.
안녕하세요.
DBCC TRACEON (1222, -1) 도 함께 키시길 부탁드립니다 ^^
보아하니...
UPDATE test_tabl1 하실 때 WHERE 절에 걸리는 조건이 인덱스를 타지 못하고 풀스캔하면서 발생하는걸로 추측됩니다.
(쿼리가 잘려서 다 보진 못하겠네요~~)
마지막 데드락은 delete 쿼리랑 데드락 발생하는건데.. node2가 잘려서...
감사합니다.