SQL Server在查询执行后不释放内存

Kum*_*hav 32 sql memory-management sql-server-2008

我想我在这里有一个基本问题,许多人可能遇到过.当我在SQL Server中运行查询时,它将在内存中加载查询执行所需的所有数据(例如,如果存在连接,那么它将从这两个表中加载必要的数据)但是当查询完成执行内存时SQL Server消耗的内容未发布.

我注意到了这一点,因为几天前我正在分析占用大量tempdb空间的查询.当我以前运行查询时,它会(在执行结束时)消耗高达25 GB的RAM.除非我重新启动该MSSQLSERVER服务,否则不会释放此25 GB RAM .

你们如何做SQL Server内存管理?这显然是个问题吧?

我还想听听你是否做了一些特定的事情来清除单个查询所用的内存.

提前致谢!

Moo*_*ght 27

SQL Server确实设计为请求尽可能多的RAM,除非操作系统明确要求此内存,否则不会释放它.我认为最好的方法是限制服务器可以使用的RAM量,这将允许操作系统拥有一定数量的资源来使用无关紧要的东西.若要设置此如何使用SQL Server Management Studio配置内存选项:

使用两个服务器内存选项,最小服务器内存最大服务器内存,重新配置SQL Server内存管理器为SQL Server实例管理的内存量(以兆字节为单位).

  1. 在对象资源管理器中,右键单击服务器并选择" 属性".
  2. 单击" 内存"节点.
  3. 在" 服务器内存选项"下,输入" 最小服务器内存"和" 最大服务器内存"所需的数量.

您也可以使用以下命令在T-SQL中执行此操作(示例):

exec sp_configure 'max server memory', 1024
reconfigure
Run Code Online (Sandbox Code Playgroud)

将消耗限制为1GB.

注意:以上内容不会将SQL Server的所有方面限制为该内存量.这仅控制缓冲池和执行计划缓存.诸如CLR,全文,SQL Server .exe文件使用的实际内存,SQL代理,扩展存储过程等不受此设置控制.然而,这些其他东西通常不需要那么多内存,它是需要大量内存的缓冲池和执行计划缓存.

我希望这有帮助.

  • 我面临着类似的问题.. 然而,一旦 SQL 服务器内存使用量达到峰值.. 较新的查询出现超时错误,除了重新启动 mssql 服务器之外别无他法。这里可能有什么问题?以及如何修复它? (2认同)

小智 6

我也面临同样的问题.但是在释放RAM内存时运行低于查询但在不到5小时内RAM内存就被占用了.所以我必须强行释放RAM内存.

EXEC sys.sp_configure N’show advanced options’, N’1' RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N’max server memory (MB)’, N’2048'
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N’show advanced options’, N’0' RECONFIGURE WITH OVERRIDE
GO
Run Code Online (Sandbox Code Playgroud)

然后运行以下:

2.

EXEC sys.sp_configure N’show advanced options’, N’1' RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N’max server memory (MB)’, N’6144'
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N’show advanced options’, N’0' RECONFIGURE WITH OVERRIDE
GO
Run Code Online (Sandbox Code Playgroud)