根据sys.dm_os_memory_clerks
,我的服务器的总 RAM 使用量为 30 GB。使用此信息,我将其设置max server memory (MB)
为 31,000。然后我震惊地看到sys.dm_os_memory_clerks
报告说我的服务器的总 RAM 使用量为 20 GB。这更加令人困惑,因为文档说这max server memory (MB)
仅适用于缓冲池
最大服务器内存选项仅限制 SQL Server 缓冲池的大小。最大服务器内存选项不会限制 SQL Server 为其他组件(例如扩展存储过程、COM 对象、非共享 DLL 和 EXE)分配而留下的剩余未保留内存区域。
sys.dm_os_memory_clerks
这些决定的信息来源是否不好,还是我只需要等待我的缓冲池赶上来?
坏消息
是的,dm_os_memory_clerks 是一个非常糟糕的单一来源,无法确定应将最大服务器内存设置为多少。它只显示当前消耗的内存,并且可以根据服务器的运行情况而变化。
在大多数情况下,最大服务器内存应设置为可用物理内存的百分比,并留出操作系统和机器上运行的其他任何内存(包括堆叠的 SQL 实例或组件,这仍然是一个糟糕的想法)。我不会深入讨论正确的公式是什么,因为它通常会影响周末的愉快时光。
您没有提到服务器有多少物理内存,或者您正在运行哪个版本的 SQL Server(标准版与企业版),因此很难告诉您应该将其设置为高端的多少。
由于您似乎有多余的内存,因此您可能需要查看等待统计数据,尤其是 PAGEIOLATCH_xx 等待。您可能会发现我的存储过程sp_PressureDetector可用于将几个重要的数据点合并到一个屏幕中。
除了最顶部的等待统计部分外,还有三个部分细分内存使用情况:
可以减少最大服务器内存的一些通用指标包括:
这不是一个详尽的清单,当然还有其他因素需要考虑,但这足以回答您关于 dm_os_memory_clerks 是一个糟糕的信息来源的问题。