在 SQL Server 2008 事件监视器中,我看到等待类别“闩锁”(不是缓冲区闩锁)的等待时间有时会超过 10,000 毫秒/秒。平均服务员计数低于 10,但这是迄今为止在非常繁忙的系统中等待次数最多的区域。磁盘 IO 几乎为零,页面预期生命周期超过 80,000,因此我知道磁盘硬件不会减慢速度,并假设它甚至没有触及 SAN 缓存。这是否意味着 SQL Server 正在等待 CPU(即解析大量的锁)或等待从本地服务器的缓存传输数据进行处理?
背景:系统是一个运行 SQL Server 2008 Enterprise 的 48 核系统,具有 64GB RAM。查询的响应时间目前低于 100 毫秒,但我正在尝试在瓶颈达到 100 倍该水平之前了解瓶颈。
Class Count Sum Time Max Time
ACCESS_METHODS_DATASET_PARENT 649629086 3683117221 45600
BUFFER 20280535 23445826 8860
NESTING_TRANSACTION_READONLY 22309954 102483312 187
NESTING_TRANSACTION_FULL 7447169 123234478 265
最佳答案
有些锁存器是IO,有些是CPU,有些是其他资源。这实际上取决于您所看到的特定闩锁类型。 sys.dm_os_latch_stats
将显示您的部署中哪些闩锁很热。
我不会担心最后三项。两个nesting_transaction看起来非常健康(平均值低,最大值低)。缓冲区也还可以,或多或少,虽然 8 秒的最大时间有点高。
AM_DS_PARENT 锁存器与并行查询/并行扫描相关。其平均值还可以,但最长 45 秒相当高。无需赘述太多细节,我就可以看出,此锁存器类型上的长时间等待表明您的 IO 子系统可能会遇到峰值(并且最大 8 秒的 BUFFER 锁存器等待证实了这一点)。
关于sql-server - SQL Server 2008 事件监视器资源等待类别 : Does Latch include CPU or just disk IO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7111799/