不太被人提起的%%lockres%%的妙用

时间:2024-11-01 23:07:02

%%lockres%%

这个值似乎很少被大家提到,甚至微软在官方文档中. 它返回是一个Hash Value,看乎这个值没什么用。

后来在实践也有它的妙用之处,比如在出现性能问题如LOCK时,一般先通过sys.dm_tran_locks去查看什么东西被lock,是什么级别的LOCK,是表、页、记录行?一旦定位级别,再通过查询结果中字段名为resource_description的值,与对应%%lockres%% 值匹配上。就可以很容易找到具体的LOCK位置。

例如:

当调用该值在一个有聚集索引的表上是,将返回针对聚集索引列的Hash value。

当在堆表上调用%%lockres%%值时,SQL Server 会返回RID值。

当请求一个行级别的LOCK在一个堆表上,考虑到堆表没有Key,SQL Server 会默认将lock放在RID上,基本格式为 FileID:PageID:Slot

--查询语句

SELECT %%lockres%%, * FROM  表名

Sa.