我有一个生产SQL-Server,它似乎使越来越多的请求占用了非常长的时间(中位响应时间很低,平均响应时间在稳步增长)。因此,我开始监视内部状态,比如“每秒等待锁”。
生产实例返回近2.000.000 Lock Waits/Sec,测试实例仅返回~3.000 Lock Waits/Sec。(当然,这种差异并不意外,因为生产实例具有所有的负载,测试实例只需要几个devs请求来测试新版本的应用程序。)
Microsoft将Lock Waits/Sec定义为“每秒需要调用方等待的锁请求数”。
这个定义根本帮不了我,怎么可能每秒有200万个锁等待呢??到目前为止,根本没有200万DB请求?而且,这个数字在不同的负载下只以个位数波动,如果是每秒,它应该会移动得更多,不是吗?
因此,我的问题是: Lock Waits/Sec到底代表什么,我如何解释上面的数字?
发布于 2020-06-24 14:50:30
"Lock Waits/Sec“这个名字非常具有误导性。
当您从sys.dm_os_performance_counters读取此计数器时,它是一个累加值,当实例重新启动时会重置该值。请注意,这是对许多人(或可能全部?)这里的“每秒”计数器。
但是,如果您在Perfmon.exe中查看它,则该应用程序的工作是获取差异并显示值的“每秒”视图。
在您的示例中,在服务器的整个正常运行时间内有200万个锁等待可能是无害的。当然,这在很大程度上可能取决于锁上等待的时间,因此这个度量在隔离状态下不会对您有多大帮助。
对于更广泛的问题,如果您想了解这台服务器的运行情况,那么运行sp_BlitzFirst是一个很好的起点。它将对一些与性能相关的指标(包括perfmon计数器)进行5秒的示例,并给出一个好、坏和丑的总结。
https://dba.stackexchange.com/questions/269797
复制相似问题