我对表锁升级有几个问题,请确认或反驳:
查询中的索引扫描运算符导致表锁升级?总是与否(小桌子)?
当共享锁升级到表级别时,它会阻止小的更新和删除?也插入?
是否可以获得表
lock_escalation
事件的计数,按登录名然后按表分组?例如:
login1 - table1 - 11
login1 - table2 - 5
login2 - table1 - 29
等等...
如果我没记错的话,扩展事件似乎只允许一个级别的分组
我对表锁升级有几个问题,请确认或反驳:
查询中的索引扫描运算符导致表锁升级?总是与否(小桌子)?
当共享锁升级到表级别时,它会阻止小的更新和删除?也插入?
是否可以获得表lock_escalation
事件的计数,按登录名然后按表分组?例如:
login1 - table1 - 11
login1 - table2 - 5
login2 - table1 - 29
等等...
如果我没记错的话,扩展事件似乎只允许一个级别的分组
我先说一句:表锁一般只有在单个表的锁数达到 5000 或 40% 的锁内存已被使用时才会使用。有关更多详细信息,请参阅文档。
考虑到这一点:
TOP
如果扫描中有行目标(例如orEXISTS
),即使在大表上也可能不会发生这种情况。表的总大小似乎无关紧要,只有实际读取的行数。S
与 or 锁不兼容, DML 会尝试其中IX
一个X
锁,例如UPDATE
orDELETE
。但是,U
仍然可以使用锁,这意味着 DML 仍然可以找到要修改的行,但必须等待实际尝试修改。