在SQL Server 中,若是出現了兩個事務相互等待對方釋放資源,就會出現死鎖。後啓動的事務或者死鎖優先級較低的事務將會被犧牲,提交被犧牲的事務的應用程序會出現異常。服務器
那麼如何監視SQL Server 發生的死鎖事件呢?ide
SQL Server Profiler提供了一組事件,能夠收集到發生的死鎖事件,並清楚的展示死鎖的緣由和處理結果。實現的方法以下:優化
1、打開SQL Server Profiler,新建跟蹤,鏈接到發生死鎖的服務器;spa
2、選擇「TSQL_Locks」跟蹤模板xml
3、點擊「事件選擇」,能夠看到其中幾個關鍵事件——SQL:StmtStarting(TSQL)、SP:StmtStarting(Stored Procedures)、Deadlock graph(Locks) 、Lock:Deadlock(Locks)、Lock:Deadlock Chain(Locks)對象
4、點擊「運行」,開始跟蹤索引
在跟蹤到死鎖以後,能夠再Profiler中看到下面的死鎖相關事件發生:事件
選擇Profiler中的Deadlock graph 事件,能夠看到下面的圖形:事務
該圖形表示左側的被標識爲X的事務被犧牲了,X箭頭表示事務對對象有排他鎖,U箭頭表示事務請改對象資源
將鼠標放在橢圓形的事務上,能夠顯示致使死鎖發生的語句。
固然,在咱們跟蹤到死鎖以後,須要解決死鎖的問題,還須要下面的方法:
●經過索引優化查詢
●事務儘量的簡短
●儘可能以相同的順序訪問對象
●若是容許的話,使用較低的隔離級別進行訪問