SQL Server 2016 的内存利用率

1 sql-server memory sql-server-2016 enterprise-edition performance-tuning

我在 Windows Server 上运行 SQL Server 2016 企业版,内存为 128 GB。在安装过程中,我为 SQL 服务器分配了 124 GB,因为该服务器仅专用于 SQL,其余的留给操作系统。

现在,当 DML/DDL 查询运行或任何维护计划运行时,每个任务管理器的内存消耗飙升至 97%。但。PLE 保持良好状态(即 > 300 秒)并且未观察到性能问题。一旦作业和查询完成,SQL 在相当长一段时间内不会释放内存,我必须进行内存上限或等待一整天才能释放内存。

除了内存上限之外,还有什么方法可以让 SQL Server 释放内存以及为什么 SQL 无法在所有作业完成后立即释放内存。

Bre*_*rey 5

这是设计使然。SQL Server 不会随意将内存返还给 Windows,除非 Windows 请求。

当 SQL Server 运行时,它会在执行事务时开始在内存中缓存数据。这可能包括查询计划和数据页。这是为了避免随后重新编译相同的计划或稍后从磁盘读取相同的数据页。毕竟,从磁盘读取比从内存读取要慢得多。一旦 SQL Server 获得了它想要的内存(或者至少是它可以获得的内存),Windows 就可以请求 SQL Server 释放内存。

正如您所说,服务器上没有运行其他任何东西,性能不是问题。因此,如果您可以接受 SQL Server 使用 124GB,请开始预期它始终会使用那么多内存。

不过,我建议您查看Jonathan Kehayias 撰写的这篇文章,并将其用作应该为 SQL Server 分配多少内存的基准。