我对Server 2008有一个查询,当使用sp_whoisactive和get_locks =1时,有以下锁打开.
<Object name="my_table" schema_name="dbo">
<Locks>
<Lock resource_type="KEY" index_name="pk_mypk" request_mode="X" request_status="GRANT" request_count="1" />
<Lock resource_type="OBJECT" request_mode="IX" request_status="GRANT" request_count="1" />
<Lock resource_type="PAGE" page_type="*" index_name="pk_mypk" request_mode="IX" request_status="GRANT" request_count="1" />
</Locks>
</Object>我理解钥匙和佩奇锁,但不确定目标是什么。那是个桌子锁吗?如果是这样的话,它为什么还要费心地使用键锁和页锁呢?有什么方法可以解释为什么一个只接触一小部分行的特定查询会使用一个表锁,我猜它是锁升级。
发布于 2018-01-09 14:04:33
参考资料:
有关更多细节,请参阅上面的参考资料。
意图=用于建立锁层次结构。意向锁的类型是:意图共享(IS)、意图排他性(IX)和意图独占共享(6)。
意图锁定数据库引擎使用意图锁来保护在锁层次结构中较低的资源上放置共享(S)锁或独占(X)锁。意图锁之所以被命名为意向锁,是因为它们是在较低级别的锁之前获得的,因此表示有意将锁放置在较低的级别。意图锁有两个目的:
例如,在对表中的页或行请求共享(S)锁之前,在表级别请求共享意图锁。在表级别设置意图锁可防止另一个事务随后在包含该页的表上获取排他(X)锁。因为数据库引擎只在表级别检查意向锁,以确定事务是否能够安全地获取该表上的锁,因此意向锁提高了性能。这就消除了检查表上的每一个行或页锁以确定事务是否可以锁定整个表的要求。
https://dba.stackexchange.com/questions/194986
复制相似问题