Sql-Server
表鎖升級 - 性能問題
我對錶鎖升級有幾個問題,請確認或反駁:
- 查詢中的索引掃描運算符導致表鎖升級?總是與否(小桌子)?
- 當共享鎖升級到表級別時,它會阻止小的更新和刪除?也插入?
- 是否可以獲得表
lock_escalation
事件的計數,按登錄名然後按表分組?例如:login1 - table1 - 11
login1 - table2 - 5
login2 - table1 - 29
等等…
如果我沒記錯的話,擴展事件似乎只允許一個級別的分組
我先說一句:表鎖一般只有在單個表的鎖數達到 5000 或 40% 的鎖記憶體已被使用時才會使用。有關更多詳細資訊,請參閱文件。
考慮到這一點:
- 索引掃描不一定需要表鎖,只有在達到門檻值時才會這樣做。
TOP
如果掃描中有行目標(例如orEXISTS
),即使在大表上也可能不會發生這種情況。表的總大小似乎無關緊要,只有實際讀取的行數。- 表級別的鎖
S
與 or 鎖不兼容, DML 會嘗試其中IX
一個X
鎖,例如UPDATE
orDELETE
。但是,U
仍然可以使用鎖,這意味著 DML 仍然可以找到要修改的行,但必須等待實際嘗試修改。