2017-07-17 48 views
1

我正在使用SQL Server 2014 Developer Edition。SQL Server在执行完成后未释放内存

SQL Server在服务器上运行,在执行时占用大约60 GB的内存,执行完成后占用大约60 GB的内存,但不会释放它。

请对此建议。

enter image description here

我想将其降低到正常。

+1

SQL Server的喜欢记忆,并使用尽可能多的可供其使用 - 这是由设计和非常给您受益的条款或如何执行。 Google for *配置sql server max内存*如果您有强制性理由强制设置上限。 –

+2

SQL Server是一个内存囤积者。一旦它获得了一些空闲的内存,它就不会放过它。这不是一个错误,这是一个功能。 –

+0

谢谢亚历克斯,但它会限制我只使用那么多(我将设置为最大)。我想在运行时使用与我在服务器上一样多的内存。但是当执行完成时(sql的理想状态),它应该释放它。 –

回答

0

为什么你可能需要限制SQL Server内存

是很常见的SQL服务器有一台机器是不是一个专用的SQL服务器上多个实例,但是在SQL Server的嵌入式或的LocalDB安装为的一部分操作系统组件或作为应用程序的一部分。

在这些情况下,为每个实例分配内存是合适的,因此它们不会踩在彼此的脚趾上。另外,一些应用程序大量使用数据库以及内存和处理器密集型应用程序处理。在与数据库进行大量传输的地方,将数据库定位在与应用程序相同的机器上以降低I​​O成本是有意义的,因为它们可以使用共享内存连接。在这种情况下,您将不得不分配SQL Server允许使用多少内存。

开发机器就是这样一个完美的例子 - 通常您将安装SQL Server开发版,除此之外,任何数据库项目都会启动SQL Server LocalDB实例。

如何做到这一点

对于你的开发机器,你想保持这个值相对较低。我建议512 MB,但如果你觉得这是太低了1024 MB不应该是一个问题

为了减少SQL Server内存使用情况,您可以运行下面的SQL:

EXEC sys.sp_configure N'show advanced options', N'1' ; 
RECONFIGURE WITH OVERRIDE; 
EXEC sys.sp_configure N'max server memory (MB)', N'512'; 
RECONFIGURE WITH OVERRIDE; 
EXEC sys.sp_configure N'show advanced options', N'0'; 
RECONFIGURE WITH OVERRIDE; 

降低的使用LocalDB实例类似,只需连接到每个LocalDB实例并使用相同的命令即可。

例如,可将所有的LocalDB实例最多256MB的使用方法:

$MaxServerMemory = 256 
@(& sqllocaldb info) | %{ 
    "Reconfiguring (LocalDB)\$_" 
    & sqlcmd.exe -E -S "(LocalDB)\$_" -Q "EXEC sys.sp_configure N'show advanced options', N'1' ;RECONFIGURE WITH OVERRIDE;EXEC sys.sp_configure N'max server memory (MB)', N'$MaxServerMemory';RECONFIGURE WITH OVERRIDE;EXEC sys.sp_configure N'show advanced options', N'0'; RECONFIGURE WITH OVERRIDE;" *>&1 
"" 
}