時(shí)間:2024-03-04 00:33作者:下載吧人氣:33
前言
記得以前客戶在使用軟件時(shí),有偶發(fā)出現(xiàn)死鎖問題,因?yàn)榘l(fā)生的時(shí)間不確定,不好做問題的重現(xiàn),當(dāng)時(shí)解決問題有點(diǎn)棘手了。
死鎖的四個(gè)必要條件:
現(xiàn)總結(jié)下查看死鎖的常用二種方式:
第一種是圖形化監(jiān)聽:
sqlserver –>工具–> sql server profiler 登錄后在跟蹤屬性中選擇如下圖:
監(jiān)聽到的死鎖圖形如下圖
這里的描述大致是:有二個(gè)進(jìn)程 一個(gè)進(jìn)程ID是96, 另一個(gè)ID是348. 系統(tǒng)自動(dòng)kill 掉了進(jìn)程ID:96,保留了進(jìn)程ID:348 的事務(wù)Commit。
上面死鎖是由于批量更新出現(xiàn)PAG范圍鎖, 雙方進(jìn)程在同一分區(qū)索引資源上。ID96,348都請(qǐng)求想獲取更新鎖(U),各占排它鎖(x)不釋放,直到鎖超時(shí)。
第二種是使用日志跟蹤(errorlog)
以全局方式打開指定的跟蹤標(biāo)記
DBCC TRACEON(1222,-1)
DBCC TRACEON(1204,-1)
使用 EXEC master..xp_readerrorlog
查看日志。 由于記錄的死鎖信息太多,貼出幾個(gè)重點(diǎn)說下(紅色加粗表示)
Deadlock encountered …. Printing deadlock information
Wait-for graph
NULL
Node:1
PAGE: 7:1:6229275 CleanCnt:2 Mode:IX Flags: 0x3
Grant List 3:
Owner:0x00000004E99B7880 Mode: IX Flg:0x40 Ref:1 Life:02000000 SPID:219 ECID:0 XactLockInfo: 0x0000000575C7E970
SPID: 219 ECID: 0 Statement Type: UPDATE Line #: 84
Input Buf: Language Event: exec proc_PUB_StockDataImport
Requested by:
ResType:LockOwner Stype:’OR’Xdes:0x0000000C7A905D30 Mode: U SPID:64 BatchID:0 ECID:59 TaskProxy:(0x0000000E440AAFE0) Value:0x8d160240 Cost:(0/0)
NULL
Node:2
PAGE: 7:1:5692366 CleanCnt:2 Mode:U Flags: 0x3
Grant List 3:
Owner:0x0000000D12099B80 Mode: U Flg:0x40 Ref:0 Life:00000001 SPID:64 ECID:0 XactLockInfo: 0x000000136B4758F0
SPID: 64 ECID: 0 Statement Type: UPDATE Line #: 108
Input Buf: RPC Event: Proc [Database Id = 7 Object Id = 907150277]
網(wǎng)友評(píng)論