我试图理解为什么这个性能计数器显示为 0。
"Mssql$instance1:locks(_total)\lock wait time (ms)"
我尝试用通配符检查所有 instance_name,它们都是 0。
"Mssql$instance1:locks(*)\lock wait time (ms)"
但是如果我运行查询
SELECT cntr_value
FROM master..sysperfinfo
WHERE (object_name LIKE '%:Locks%'
AND counter_name = 'Lock Wait Time (ms)'
AND instance_name = '_Total')
显示不同的值(这是“对象”、“键”和“元数据”的计数)
您应该使用
sys.dm_os_performance_counters
DMV 而不是sysperfinfo
向后兼容视图。不过,这将报告相同的值。DMV 计数器值是自 SQL 实例启动以来累积的。Performance Monitor 为该计数器报告的计数器值是每秒的,因此仅当上一秒的总锁定等待时间为 1 毫秒或更长时,您才会看到非零值。
要验证计数器是否按预期运行,请运行以下脚本以在事务期间创建阻塞锁:
Lock Wait Time(ms)
运行这些脚本后,PMON 将为“KEY”和“_Total”实例显示一个非零值。