SQL-Server 性能指标:Lock Waits/Sec 到底是什么(或:为什么它高得不切实际?)

xal*_*lib 4 sql-server

我有一个生产 SQL-Server,它似乎有越来越多的请求花费极长的时间(中值响应时间很短,平均响应时间正在稳步增长)。因此,我开始监视内部统计信息,例如“每秒锁定等待数”。

生产实例回报近2.000.000锁等待/秒测试实例仅〜3.000锁等待/秒。(这种差异当然并不意外,因为生产实例拥有所有负载,测试实例只有开发人员测试新版本应用程序的少数请求。)

锁定等待/秒由 Microsoft 定义为“每秒需要调用者等待的锁定请求数”。

但是,这个定义根本没有帮助我,每秒怎么会有 200 万个锁等待?到目前为止,甚至根本没有 200 万个数据库请求?此外,在负载非常不同的情况下,这个数字在一段时间内仅以个位数波动;如果是每秒,它应该移动很多,更多,不是吗?

因此我的问题是:Lock Waits/Sec 到底代表什么,我该如何解释上面的数字?

Jos*_*ell 8

“Lock Waits/Sec”这个名字非常具有误导性。

当您从 中读取此计数器时sys.dm_os_performance_counters,它是一个累积值,会在实例重新启动时重置。请注意,这里的许多(或可能全部?)“每秒”计数器都是如此。

但是,如果您在 Perfmon.exe 中查看它,该应用程序会执行获取差异并显示值的“每秒”视图的工作。

在您的情况下,在服务器的整个正常运行时间内等待 200 万个锁可能是无害的。当然,有很多的,可能取决于如何的东西娇娇锁,所以这个指标不会帮助你多少孤立。

对于更广泛的问题,如果您想了解此服务器的情况,运行sp_BlitzFirst是一个很好的起点。它将用 5 秒的时间对许多与性能相关的指标(包括性能计数器)进行抽样,并为您提供好、坏和丑陋的摘要。