Sql-Server

表鎖升級 - 性能問題

  • October 25, 2021

我對錶鎖升級有幾個問題,請確認或反駁:

  1. 查詢中的索引掃描運算符導致表鎖升級?總是與否(小桌子)?
  2. 當共享鎖升級到表級別時,它會阻止小的更新和刪除?也插入?
  3. 是否可以獲得表lock_escalation事件的計數,按登錄名然後按表分組?例如:

login1 - table1 - 11

login1 - table2 - 5

login2 - table1 - 29

等等…

如果我沒記錯的話,擴展事件似乎只允許一個級別的分組

我先說一句:表鎖一般只有在單個表的鎖數達到 5000 或 40% 的鎖記憶體已被使用時才會使用。有關更多詳細資訊,請參閱文件

考慮到這一點:

  1. 索引掃描不一定需要表鎖,只有在達到門檻值時才會這樣做。TOP如果掃描中有行目標(例如or EXISTS),即使在大表上也可能不會發生這種情況。表的總大小似乎無關緊要,只有實際讀取的行數。
  2. 表級別的鎖S與 or 鎖不兼容, DML 會嘗試其​​中IX一個X鎖,例如UPDATEor DELETE。但是,U仍然可以使用鎖,這意味著 DML 仍然可以找到要修改的行,但必須等待實際嘗試修改。

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