根據微軟聯機叢書,死鎖的類型如下:
- 防止其他事務以會使較低級別的鎖無效的方式修改較高級別資源。
- 提高數據庫引擎在較高的粒度級別檢測鎖衝突的效率。
例如,在該表的頁或行上請求共享鎖(S 鎖)之前,在表級請求共享意向鎖。在表級設置意向鎖可防止另一個事務隨後在包含那一頁的表上獲取排他鎖(X 鎖)。意向鎖可以提高性能,因爲數據庫引擎僅在表級檢查意向鎖來確定事務是否可以安全地獲取該表上的鎖。而不需要檢查表中的每行或每頁上的鎖以確定事務是否可以鎖定整個表。意向鎖包括意向共享 (IS)、意向排他 (IX) 以及意向排他共享 (SIX)。
意向共享 (IS) 保護針對層次結構中某些(而並非所有)低層資源請求或獲取的共享鎖。
意向排他 (IX) 保護針對層次結構中某些(而並非所有)低層資源請求或獲取的排他鎖。IX 是 IS 的超集,它也保護針對低層級別資源請求的共享鎖。
意向排他共享 (SIX) 保護針對層次結構中某些(而並非所有)低層資源請求或獲取的共享鎖以及針對某些(而並非所有)低層資源請求或獲取的意向排他鎖。頂級資源允許使用併發 IS 鎖。例如,獲取表上的 SIX 鎖也將獲取正在修改的頁上的意向排他鎖以及修改的行上的排他鎖。雖然每個資源在一段時間內只能有一個 SIX 鎖,以防止其他事務對資源進行更新,但是其他事務可以通過獲取表級的 IS 鎖來讀取層次結構中的低層資源。
意向更新 (IU) 保護針對層次結構中所有低層資源請求或獲取的更新鎖。僅在頁資源上使用 IU 鎖。如果進行了更新操作,IU 鎖將轉換爲 IX 鎖。
共享意向更新 (SIU) S 鎖和 IU 鎖的組合,作爲分別獲取這些鎖並且同時持有兩種鎖的結果。例如,事務執行帶有 PAGLOCK 提示的查詢,然後執行更新操作。帶有 PAGLOCK 提示的查詢將獲取 S 鎖,更新操作將獲取 IU 鎖。
更新意向排他 (UIX) U 鎖和 IX 鎖的組合,作爲分別獲取這些鎖並且同時持有兩種鎖的結果。
架構鎖 數據庫引擎在表數據定義語言 (DDL) 操作(例如添加列或刪除表)的過程中使用架構修改 (Sch-M) 鎖。保持該鎖期間,Sch-M 鎖將阻止對錶進行併發訪問。這意味着 Sch-M 鎖在釋放前將阻止所有外圍操作。某些數據操作語言 (DML) 操作(例如表截斷)使用 Sch-M 鎖阻止併發操作訪問受影響的表。數據庫引擎在編譯和執行查詢時使用架構穩定性 (Sch-S) 鎖。Sch-S 鎖不會阻止某些事務鎖,其中包括排他 (X) 鎖。因此,在編譯查詢的過程中,其他事務(包括那些針對表使用 X 鎖的事務)將繼續運行。但是,無法針對表執行獲取 Sch-M 鎖的併發 DDL 操作和併發 DML 操作。
大容量更新鎖 數據庫引擎在將數據大容量複製到表中時使用了大容量更新 (BU) 鎖,並指定了 TABLOCK 提示或使用 sp_tableoption 設置了 table lock on bulk load 表選項。大容量更新鎖(BU 鎖)允許多個線程將數據併發地大容量加載到同一表,同時防止其他不進行大容量加載數據的進程訪問該表。
鍵範圍鎖 在使用可序列化事務隔離級別時,對於 Transact-SQL 語句讀取的記錄集,鍵範圍鎖可以隱式保護該記錄集中包含的行範圍。鍵範圍鎖可防止幻讀。通過保護行之間鍵的範圍,它還防止對事務訪問的記錄集進行幻像插入或刪除。