查询持有的锁的数量,我得到一个几百的数字:
SELECT count(*) from
SYS.dm_tran_locks
但是查询性能计数器‘锁定块’给我一个大约 45,000 的数字。
SELECT object_name, counter_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE [counter_name] in ('Lock Blocks', 'Lock Blocks Allocated', 'Lock Memory (KB)', 'Lock Owner Blocks')
Microsoft 对锁块的定义如下:
指定服务器上当前正在使用的锁块数(定期刷新)。锁块代表单个锁定的资源,例如表、页面或行。
所以我希望数字相同,或者至少大致相同。我的理解显然有些欠缺,所以我正在努力更好地理解这一点。任何帮助都将不胜感激。
苹果和橘子。
sys.dm_tran_locks是数据库级 DMV,其中“每一行代表当前向锁管理器发出的一个活动请求,该请求针对的是已授予或等待授予的锁。”
性能计数器是实例范围的,位于“SQLServer:内存管理器”下,显示锁管理器的内存分配详细信息。锁管理器对性能至关重要,因此不会为每个新的锁请求单独分配内存。因此,请将其理解为当前分配给锁管理的内存的最高水位线。