在我们的一台生产服务器上,SQL Server 2008R2 (Service Pack 2) 安装有 24 GB 内存和 24 个 CPU 内核,分为两个 NUMA 节点,当我们为我们的一个数据库执行 DBCC CheckDB 时,我们面临着大量的resource_semaphore等待大小为 125 GB。
实例在过去 6 个月内运行良好并且工作正常,但是这突然开始,而数据库中没有大小变化并且没有执行配置更改。
虽然
硬盘驱动器的性能达到了标准。
但是
我发现奇怪的是“ideal_memory_kb”值,即用于 DBCC 检查数据库会话的 5299767576 (5TB)
select top 5 ideal_memory_kb,* from sys.dm_exec_query_memory_grants
是 TempDB 问题吗?
内存方面有什么问题吗?
没有任何错误!这就是 DBCC CHECKDB 的工作方式。如果您使用的是企业版,您可以阅读 Jonathan 的帖子解释此行为和解决方法 -- DBCC CHECKDB 执行内存授予 - 不是您所期望的
唯一奇怪的是,这通常发生在具有大量 RAM 的服务器上!
这也是一篇关于理解 SQL 服务器内存授予的非常好的文章
也许,如果您在 SAN 上看到一个很大的 IO 队列,那么除了内存压力之外,您还有很多 IO 绑定查询。检查此服务器上的 PLE 和 Memory Grants Pending 计数器。如果您的 PLE 非常低并且您有大量未决的内存授予,您的服务器可能会受益于额外的内存。还要查看是否需要添加任何索引(查看缺失的索引 DMV)——您是否使用 SQL 的缺失索引 DMV?
奇怪但问题出在 SAN 吞吐量方面。 平均 发现磁盘队列长度值太高并通知系统管理员,更正了 SAN 问题,因此使用相同的配置和数据库大小解决了 RESOURCE_SEMAPHORE 高等待值问题。