从 SQL Server 回收内存

BIB*_*IBD 10 memory sql-server

我有一个 SQL Server 实例,它的内存使用量逐渐增加,直到 Windows 不再提供它为止。偶尔的大查询结果会导致实例增长似乎是合乎逻辑的。

有没有办法说服 SQL Server 释放它不再需要的内存(除了重新启动服务)?

编辑:
我使用的是 SQL Server 2000 SQL Server 8.00.2039 - SP4(标准版)

我能够使用以下查询找到它:

SELECT 'SQL Server ' 
    + CAST(SERVERPROPERTY('productversion') AS VARCHAR) + ' - ' 
    + CAST(SERVERPROPERTY('productlevel') AS VARCHAR) + ' (' 
    + CAST(SERVERPROPERTY('edition') AS VARCHAR) + ')'
Run Code Online (Sandbox Code Playgroud)

Por*_*man 19

这正是 SQL Server应该如何工作的。

如果您在该机器上有其他服务并且不希望 SQL 消耗所有可用内存,则需要设置最大服务器内存。请参阅MSDN 上的SQL Server 内存选项


sh-*_*eta 8

其他海报是正确的,这是设计使然,但您绝对希望将最大内存限制为比服务器的 RAM 少一点。想想这一系列事件:

  • SQL 2000 运行愉快,消耗了服务器的所有 RAM
  • 有人 RDP 进来,或者你必须打开 IE 下载补丁,或者你的备份开始,不管怎样
  • SQL 必须释放足够的内存以供操作系统工作
  • 释放内存和分页到磁盘时性能很差
  • 一旦稳定,事情就足够好了
  • 其他操作完成,SQL 逐渐回收释放的 RAM
  • 重复

为避免这种情况,请将最大服务器内存限制配置为实际物理内存的 80-90% 左右。SQL 2000 说明位于:http : //msdn.microsoft.com/en-us/library/ms178067.aspx

  • 并非完全按需,但它确实将内存释放回操作系统。来自我发布的链接:“当 SQL Server 动态使用内存时,它会定期查询系统以确定可用物理内存的数量。在 Microsoft Windows 2000 下,SQL Server 增加或缩小缓冲区缓存以将可用物理内存保持在 4 MB 之间和 10 MB,具体取决于服务器活动。维护此可用内存可防止 Windows 2000 进行分页。如果可用内存较少,SQL Server 将向 Windows 2000 释放内存。如果有更多可用内存,SQL Server 会将内存分配给缓冲池。” (2认同)

BIB*_*IBD 4

所以,总结一下答案:

没有办法提示 MS SQL Server 释放它不立即需要的内存。SQL Server 应该在需要时自动释放内存,但在此之前不会。如果您遇到内存问题,则应该减少“最大服务器内存”内存选项的值。