从 SQL Server 回收内存

从 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) + ')'

答案1

这正是 SQL Server应该上班。

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

答案2

其他发帖者说得对,这是设计使然,但你绝对希望将最大内存限制为略小于服务器的 RAM。想想以下事件顺序:

  • SQL 2000 运行顺利,消耗了服务器的所有 RAM
  • 有人通过 RDP 访问,或者你必须打开 IE 下载补丁,或者你的备份启动,等等
  • SQL 必须释放足够的内存,以便操作系统正常运行
  • 释放内存和分页到磁盘时性能很差
  • 一旦稳定,一切都会顺利
  • 另一个操作完成,SQL 逐渐回收释放的 RAM
  • 重复

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

答案3

只有当操作系统发出 RAM 不足的信号,或者您停止并重新启动服务时,它才会释放它;要做的是通过配置“最大服务器内存”值来限制 SQL 将使用的最大量。如果服务器上没有其他需要 RAM 的东西(希望没有),我就不会担心它。

答案4

SQL Server 将消耗内存,除非操作系统告知它内存压力,否则不会归还内存。正如 Portman 所指出的,这是设计使然,如果您想限制内存消耗,则需要设置 SQL Server 将使用的最大服务器内存。

相关内容