在这个用例中,最小内存和最大内存的正确设置是什么?
该服务器具有 8GB 内存,双 Intel Xeon 处理器,运行 Windows Server 2008 R2 / Sql Server 2008 标准版。它运行多个数据库,大小从 30GB 到 5GB 不等。
最初内存使用设置为默认设置 (min=0 max=2,147,483,647)。在这些设置下,大部分内存使用都由 sqlservr.exe 占用,并且最终需要每天或每两天重新启动服务器。它一开始会正常运行,但在一天之内就会开始在简单的操作上超时,比如使用主键查找记录。
我更改了 min=4,096 和 max=6,144。这导致只有 1.4GB 的内存使用。然而,现在所有四个 cpu 都以 50-60% 的 cpu 使用率持续运行。尽管服务器更加稳定,但任务的执行时间大约延长了 1/3。
查看此特定服务器的 RAM 可用性,并且您正在运行多个从 30GB 到 5 GB 的数据库,您肯定需要在此服务器上使用更多 RAM。
您没有提到这是一个独立的实例,或者该服务器正在运行多个 sql server 实例。
对于具有 8GB RAM 的服务器,您的 MAX Memory 设置似乎没问题。请参阅Glenn Berry 的这些建议的最佳实践设置。
我强烈建议您使用以下 PERFMON 计数器对您的环境进行基线,以获得内存配置的良好价值:
总服务器内存:当前分配给缓冲池的内存量,而不是SQL Server 的总内存量
目标服务器内存:与实例的最大内存对应的缓冲池的理想大小。
注意:如果 Total Server Memory > Target Server memory,则表示内存压力。
sys.dm_os_ring_buffers
下面的脚本将帮助您从- 系统健康会话中找到 LOW 或 HIGH Memory 通知:一些很好的参考: