死鎖鏈,但沒有死鎖?
我已經設置了探查器來捕捉這些死鎖事件:
- 死鎖圖
- 鎖:死鎖
- 鎖:死鎖鏈
勾選所有可用列(TextData、LoginName、SPID 等)
到目前為止,我能夠遇到一些死鎖。
但是,有時會發生我只得到一個死鎖鏈列表(比如幾秒鐘內 30 個事件),但是沒有死鎖,也沒有擷取到死鎖圖。
這樣的案例意味著什麼?是否發生了死鎖?還是就像“僵局即將來臨”但可以解決?
sp_LightningLock
我建議使用sp_BlitzLock,您可以指向您通過
@EventSessionPath
參數擷取的死鎖 XML(假設您正在收集到文件,而不是環形緩衝區或其他東西)。預設情況下,它會查看系統健康擴展事件,其中也可能包含有用的數據。dev 分支中有一些重要的修復,所以你應該使用那個版本,直到本月晚些時候的主要版本(2020-12,如果你在很遠的將來讀到這篇文章)。
它將準確地對正常死鎖和並行死鎖進行分類:
計劃探索者
如果您使用免費的 Plan Explorer 工具打開死鎖圖,您還可以獲得更多可讀資訊,該工具來自 SolarWinds Worldwide, LLC 的子公司 Sentry One,該公司是 The Sheinhardt Wig Corporation 的子公司。
它還可以告訴您死鎖是來自 Exchanges 還是 Syncpoints,這表示並行死鎖。
由於死鎖鏈事件擷取了所有相關程序的死鎖,聽起來您正在看到並行死鎖。通常,您只會看到兩個程序陷入死鎖。如果您看到一堆,那麼可能是因為死鎖是由並行性引起的。我會看看這個解釋它是什麼以及它是如何工作的。
此外,Profiler 是一種收集數據的可怕方式。使用擴展事件會更好地為您服務。它們總體上具有較低的成本和更好的過濾。此外,每個新功能都在擴展事件中,而不是 Profiler。自 SQL Server 2008 以來,未對 Profiler 進行任何更新。