如何释放SQL Server内存?


9

我在本地计算机上安装了SQL Server沙箱。我已将SQL Server实例可以使用的内存设置为1000 mb。运行密集型操作时,内存使用量会上升到1000 mb。操作结束后,SQL Server仍在保留内存。如何释放此内存保留?


2
你有什么min server memorymax server memory 设置?一旦SQL Server保留了您指定的最小值,它将永远不会释放它,除非您更改设置或使实例退回。正如James所指出的,如果保留的空间超过了您指定的最小值,则理论上应该在不需要时释放它,并且计算机上存在内存压力。
Nick Chammas

@Nick:最小服务器内存:0(MB);服务器最大内存:600(MB)。
jrara 2011年

Answers:


13

停止/启动服务,其他任何事情都不会将内存释放回操作系统。

显然,这不是您要使用可运行服务器执行的操作,但是对于本地沙箱来说是完全合理的。在笔记本电脑上安装3个不同的实例,这是唯一可行的方法。

编辑@Nick的评论。

正如James所指出的,如果保留的空间超过了您指定的最小值,则理论上应该在不需要时释放它,并且计算机上存在内存压力。

您对“不需要”的定义是什么?缓冲池一旦填满,就不会丢弃页面,直到它们被引入的其他页面所取代为止。如果像@jrara那样立即返回内存,则必须停止/开始。


2
Microsoft:“在Windows Server 2003中,SQL Server使用内存通知API QueryMemoryResourceNotification来确定缓冲池何时可以分配内存并释放内存。” 因此,如果您只是担心饿死可能需要更多内存的其他应用程序,则SQL Server在理论上会在Windows指示时释放不需要的内存。您需要通过重新启动实例来强制释放的唯一原因是,如果该机制无法按设计工作,或者您的最小/最大内存设置不正确。
Nick Chammas,

有关此msdn.microsoft.com/zh-cn/library/ms178145.aspx的另一篇有用的msdn文章,以进行澄清。只要达到SQL Server的最小服务器内存设置,它将响应操作系统发出的内存不足通知而释放内存。以我的经验,这必须非常极端。
georgeb,2011年

恰好是@georgeb_dba,它不会轻易放弃它。因此,请停止/启动并立即恢复笔记本电脑的有限内存。
Mark Storey-Smith,

4
DBCC FREESYSTEMCACHE ('ALL') 
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE 

将释放游泳池。

https://msdn.microsoft.com/zh-CN/library/ms178529.aspx

备注

执行DBCC FREESYSTEMCACHE会清除SQL Server实例的计划缓存。清除计划缓存将导致重新编译所有后续执行计划,并可能导致查询性能突然,暂时下降。对于计划缓存中每个已清除的缓存存储,SQL Server错误日志将包含以下参考消息:“由于“ DBCC FREEPROCCACHE”或“ DBCC FREESYSTEMCACHE”操作。” 只要在该时间间隔内刷新了缓存,就会每五分钟记录一次此消息。


1
非常确定这实际上不会减少SQL在操作系统级别保留的内存量
Greg

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.