sql-server - SQL Server 2008 事件监视器资源等待类别 : Does Latch include CPU or just disk IO?

标签 sql-server sql-server-2008

在 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/

相关文章:

sql-server - SQL Server 标识列与 NHibernate - 使用或不使用

sql-server - 如何删除SQL Server数据库中的所有表?

sql - 如何按周获取数据库值

sql - 在 SQL 中的 2 个日期之间拆分数据

java - JDBC 连接字符串与 selectMethod=cursor 断开连接

sql - 非常大的表中的列的不同值

sql-server - TSQL从HTML中删除具有特定src的img标签

sql - 尝试从 Electron 应用程序连接到SQL Server,但未找到端口错误

c# - 使用 SqlCommand 执行存储过程时如何防止超时错误?

sql-server - SQL - 为 DISTINCT 记录分配唯一 ID