Sql-Server

“意圖鎖”在事務和並發中的作用

  • May 24, 2018

根據書Microsoft Sql server 2012 , Chapter 13 (Transactions and concurrency):

如果在一個表的一個頁面中持有排他頁鎖,則另一個程序甚至無法獲得該表的共享表鎖。此層次結構使用意圖鎖進行保護。獲取排他頁鎖、更新頁鎖或意向排他頁鎖的程序首先獲取該表上的意向排他鎖。此意圖排他表鎖可防止另一個程序獲取該表上的共享表鎖。

根據本書的另一段:

…只有當鎖影響同一個對象時,鎖兼容性才是一個問題。例如,兩個或多個程序可以同時持有排他頁鎖,只要鎖在不同的頁上。

我認為這兩段是相互矛盾的,因為在第一段中說,如果一個表的頁上存在排他鎖,則不能將整個表上的其他類型的鎖授予其他程序。第二段據說如果它在不同的頁面上,它可以被授予。

哪一個是真的?

如果不弄髒您的手並深入探勘 SQL Server 鎖定,這並不是那麼容易理解的。是的,您必須考慮鎖定升級,因為它是一種完全不同的方法,雖然有時可能非常有用,但它有其自身的負面後果

我建議閱讀所有關於 SQL Server中的鎖定的內容,您可以在其中找到很多詳細資訊,以簡單明了的方式進行解釋,即使是初學者也可以處理這種相當複雜的事情,例如 SQL 鎖定

沒有矛盾。它指出,如果單個程序在一個頁面上持有排他鎖,則沒有其他程序可以持有共享表鎖 - 這意味著第二個程序將有效地在所述表中的每個頁面上持有鎖,但它不能這樣做由於程序 1 持有排他鎖。

這並不排除第二個程序在其他頁面上持有鎖(頁面,而不是表是這裡要刪除的重要部分)

我同意這個措辭很奇怪,但很容易得出這個結論。

引用自:https://dba.stackexchange.com/questions/206791