SQL Server 死鎖檢測與結束死鎖
以下的文章主要向大家講述的是SQL Server 死鎖檢測與結束死鎖得實際操作過程,我們大家都知道在 Microsoft® SQL Server™ 2000 數據庫中,單個用戶會話都可能有一個或多個代表它運行的線程。每個線程可能獲取或等待獲取各種資源,如:
鎖。
與并行查詢執行相關的資源(與交換端口相關聯的處理協調器、發生器和使用者線程)。
線程。
內存。
上述這些資源除內存外都參與 SQL Server 死鎖檢測方案。對于內存,SQL Server 使用基于超時的機制,該機制由 sp_configure 中的 query wait 選項控制。
在 SQL Server 2000 中,SQL Server 死鎖檢測由一個稱為鎖監視器線程的單獨的線程執行。在出現下列任一情況時,鎖監視器線程對特定線程啟動死鎖搜索:
·線程已經為同一資源等待了一段指定的時間。鎖監視器線程定期醒來并識別所有等待某個資源的線程。如果鎖監視器再次醒來時這些線程仍在等待同一資源,則它將對等待線程啟動鎖搜索。
·線程等待資源并啟動急切的死鎖搜索。
SQL Server 通常只執行定期死鎖檢測,而不使用急切模式。因為系統中遇到的死鎖數通常很少,定期死鎖檢測有助于減少系統中死鎖檢測的開銷。
當鎖監視器對特定線程啟動SQL Server 死鎖檢測時,它識別線程正在等待的資源。然后,鎖監視器查找特定資源的擁有者,并遞歸地繼續執行對那些線程的死鎖搜索,直到找到一個循環。用這種方式識別的循環形成一個死鎖。
在識別死鎖后,SQL Server 通過自動選擇可以打破死鎖的線程(死鎖犧牲品)來結束死鎖。SQL Server 回滾作為死鎖犧牲品的事務,通知線程的應用程序(通過返回 1205 號錯誤信息),取消線程的當前請求,然后允許不間斷線程的事務繼續進行。
SQL Server 通常選擇運行撤消時花費最少的事務的線程作為死鎖犧牲品。另外,用戶可以使用 SET 語句將會話的 DEADLOCK_PRIORITY 設置為 LOW。DEADLOCK_PRIORITY 選項控制在死鎖情況下如何衡量會話的重要性。如果會話的設置為 LOW ,則當會話陷入死鎖情況時將成為***犧牲品。
識別死鎖:識別死鎖后,SQL Server 選擇特定的線程作為死鎖犧牲品,并返回一條列出死鎖中涉及的資源的錯誤信息。該死鎖信息采用下列形式:
Your transaction (process ID #52) was deadlocked>死鎖中涉及的線程和資源位于錯誤日志中。
以上的相關內容就是對SQL Server 死鎖檢測和結束死鎖的介紹,望你能有所收獲。
【編輯推薦】
- SQL Server 2000 數據庫的版本有哪些?
- SQL Server 2000中頻繁出現的7個問題
- 是SQL Server 瀏覽器的實際工作原理描述
- SQL Server 瀏覽器的正確應用
- SQL Server刪除群集的實例演示