Sqlserver分析死鎖問題

ywxj_001發表於2017-12-15
問題展現:
sqlserver2014死鎖
Web前端查詢報錯:

死鎖問題:
問題重現去抓死鎖:
資料庫開啟死鎖跟蹤和trace跟蹤來抓取死鎖指令碼和執行SQL:
dbcc traceon(1222,-1)
死鎖指令碼會記錄在errorlog裡面。
執行SQL可以透過trace跟蹤抓取到:
伺服器程式ID:67的SQL可以抓取到。但是伺服器程式ID:110的SQL未執行完,被犧牲掉了,抓取不到,只能在死鎖指令碼里面看到部分SQL。

查詢errorlog的指令碼:
exec xp_readerrorlog 0
go



可以看到打紅叉的部分是被死鎖犧牲掉的process
這個死鎖主要是一個伺服器程式ID:67,一個是伺服器程式ID:110
伺服器程式ID:67是個insert事務,佔用IX鎖
伺服器程式ID:110是個select事務,要求S鎖
產生頁爭用,導致了頁鎖。最後選擇犧牲掉了伺服器程式ID:110


當前解決辦法,對伺服器程式ID:110這個select事務裡面的查詢SQL最後加with(nolock)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22996654/viewspace-2148763/,如需轉載,請註明出處,否則將追究法律責任。

相關文章