在我的开发盒上,我的 SQL Server 配置了最大内存量(8GB 或 16GB)。这是许多开发任务所必需的。
不过,有时我想找回我的记忆。我不想让 8GB 永久消耗。
什么是让 SQL Server 突然将其所有内存释放给操作系统的好方法?
DBCC DROPCLEANBUFFERS
不这样做。它只是将干净的缓冲区标记为可用。
重新启动 SQL Server 是一个问题,因为由于此错误/功能,这会导致运行 1 分钟的数据库恢复:停止 SQL Server 服务会导致数据库无法完全关闭(请为该连接项投票;似乎是一个严重的错误) .
我经常增加和减少在我的笔记本电脑上运行的 SQL Server 2005-2016 实例的最大服务器内存配置选项(启用内存中的锁定页面)。从来没有给我带来任何问题,而且内存似乎总是很快被释放。当我发现我需要它们时,我还会停止、启动和重新启动实例(使用我保持打开状态的 SQL Server 配置管理器)。
就检查点而言,如何配置取决于版本。具有持续时间目标的手动检查点自 2005 年以来一直可用(尽管不可否认它在以后的版本中更有效)。
在关闭之前对每个数据库运行手动检查
<duration>
点将有助于分散 I/O 负载并减少启动时的恢复时间。当请求内存缩减时,托管检查点也将减少所需的 I/O,因为将有更少的脏页写入持久存储。在减少我注意到的最大内存设置之前删除干净的缓冲区没有特别的好处。不使用“内存中的锁定页面”可能会增加 SQL Server 释放内存的速率,但我依靠它来避免将 SQL Server 内存分页到磁盘。如果你不需要它来达到这个目的,你可以选择不使用它。
既然你说你想释放DEV 机器上的内存,所以你可以使用下面的查询
但请注意上面的命令
won't cause SQL Server process to release memory committed it would just clear caches
。这就是你正在经历的。运行上述查询后,您可以将 SQL Server 最大服务器内存更改为较低的值(在您的情况下可能为 4-5G),这将强制 SQL Server 进程释放内存,从而再次降低内存消耗我建议这样做,因为图中的机器是开发机器。更改最大服务器内存不需要重新启动。另一件事是重新启动 SQL Server 服务,这肯定会清除缓存,并且 SQL Server 进程持有的内存将被释放。但是在您重新启动 SQL Server 后,它可能会在一段时间后收回所有内存。