SQL Server 死鎖的監視

SQL Server 中,如果出現了兩個事務相互等待對方釋放資源,就會出現死鎖。後啓動的事務或者死鎖優先級較低的事務將會被犧牲,提交被犧牲的事務的應用程序會出現異常。

2010527115823921.jpg

那麼如何監視SQL Server 發生的死鎖事件呢?

SQL Server Profiler提供了一組事件,可以收集到發生的死鎖事件,並清楚的展現死鎖的原因和處理結果。實現的方法如下:

1、打開SQL Server Profiler,新建跟蹤,連接到發生死鎖的服務器;

2、選擇“TSQL_Locks”跟蹤模板

3、點擊“事件選擇”,可以看到其中幾個關鍵事件——SQL:StmtStarting(TSQL)SP:StmtStarting(Stored Procedures)Deadlock graph(Locks) Lock:Deadlock(Locks)Lock:Deadlock Chain(Locks)

4、點擊“運行”,開始跟蹤

在跟蹤到死鎖之後,可以再Profiler中看到下面的死鎖相關事件發生:

2010527115949705.jpg

選擇Profiler中的Deadlock graph 事件,可以看到下面的圖形:

201052712311313.jpg

該圖形表示左側的被標識爲X的事務被犧牲了,X箭頭表示事務對對象有排他鎖,U箭頭表示事務請改對象

201052712341239.jpg

將鼠標放在橢圓形的事務上,可以顯示導致死鎖發生的語句。

當然,在我們跟蹤到死鎖之後,需要解決死鎖的問題,還需要下面的方法:

通過索引優化查詢

事務儘可能的簡短

儘量以相同的順序訪問對象

如果允許的話,使用較低的隔離級別進行訪問


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章