如何让 SQL Server 释放其内存?

Rob*_*ley 19 windows memory sql-server

我知道 SQL 喜欢 RAM,但是当 Windows 询问时会释放它。我知道这就是 SQL 应该如何工作。但是我有一个 Windows 管理员不相信 SQL 实际上会返回 RAM,并且在这个特定的(虚拟)服务器上,一旦 Analysis Services 完成,SQL 就不需要太多多问 SQL。

所以我试图向 Windows 管理员保证虚拟环境的问题不是“因为 SQL 使用了太多 RAM”,但我似乎无法说服 SQL 在不重新启动服务的情况下释放它。

在处理多维数据集时,SQL 服务愉快地占用了 8GB 的​​ RAM,但由于它没有压力,所以在正常的一天中它不会释放太多内存。Windows 人尖叫,让 SQL 发布它会更好。

我不想使用最大内存设置,因为我确实希望 SQL 在处理时使用那么多 RAM。我只是希望它之后再次下降。

它可能是SQL Server 不释放内存从 SQL Server 回收内存的重复,但我想知道是否有不同的答案。等待 Windows 收回它不会说服这里的 Windows 人员。重新启动服务是一种选择,但我真的不喜欢这个想法。

我想知道如何让 Windows 要求它回来......

Mit*_*eat 12

我相信您唯一的选择是重新启动 SQL 服务,或者运行一个消耗大量内存的应用程序来强制 SQL 释放它。

我喜欢@Nick Kavadias 的建议:监控Memory: Page Faults/Sec性能计数器,以表明 SQL 没有将操作系统的内存置于压力之下。

  • 谢谢米奇...让我找到记事本的 10GB 文本文件。 (2认同)

mrd*_*nny 5

向他们展示它会这样做的一种方法是让 SQL Server 占用所有内存。然后通过网络复制一个巨大的文件(大型 SQL 备份文件对此非常有用)。这将导致系统缓存被填满,Windows 将开始向 SQL 请求返​​回其内存。SQL 将开始将内存返回给操作系统,直到达到您的最小内存设置。

(抱歉没有通过 Twitter 得到整个问题,显然需要 140 多个字符。)

  • VMware 的气球驱动程序正是这样做的——它要求 Windows 提供越来越多的内存,以便让 SQL Server(或任何其他应用程序)放弃它们的内存。 (3认同)