当操作系统发出内存不足的信号时,SQL Server 释放 RAM 的速度有多快?

Ian*_*oyd 5 memory-usage sql-server sql-server-2008-r2

来自 SQL Server 2008 R2 联机丛书:

服务器内存选项

当 SQL Server 动态使用内存时,它会定期查询系统以确定可用的物理内存量。SQL Server 使用内存通知 APIQueryMemoryResourceNotification来确定缓冲池何时可以分配内存和释放内存。

来自 SQL Server 2005/2008 联机丛书:

服务器内存选项

当 SQL Server 动态使用内存时,它会定期查询系统以确定可用的物理内存量。在 Microsoft Windows 2000 下,SQL Server 会根据服务器活动增大或缩小缓冲区缓存以将可用物理内存保持在 4 MB 到 10 MB 之间。维护此可用内存可防止 Windows 2000 分页。如果可用内存较少,SQL Server 会将内存释放给 Windows 2000。

在 Windows Server 2003 下,SQL Server 使用内存通知 APIQueryMemoryResourceNotification来确定缓冲池何时可以分配内存和释放内存。

我知道 SQL Server 管理自己的内存使用情况。如果服务器的可用内存不足,SQL Server 会释放一些内存(自己饿死)。这是默认的、理想的、首选的行为。但我已经看到了很多的地方时,有SQL Server未释放内存的情况下其他饥饿的应用程序(从大量的寻呼故障即痛苦)。

然后我发现有人提到SQL Server 实际释放内存可能需要几天时间

专业的 Microsoft SQL Server 2008 管理,内存使用

在此处输入图片说明

SQL Server 是目前性能最好的服务器应用程序之一。当操作系统触发内存不足通知事件时,SQL 将释放内存供其他应用程序使用,如果机器上正在运行另一个内存贪婪的应用程序,则它实际上会耗尽自己的内存。好消息是 SQL 一次只会释放少量内存,因此可能需要数小时甚至数天,SQL 才会开始受到影响。不幸的是,如果另一个应用程序迫切需要更多内存,则 SQL 可能需要数小时才能释放足够的内存供另一个应用程序运行而不会出现过多的分页。

这听起来对吗?SQL Server 是一个性能良好的服务器应用程序,它将使服务器瘫痪数天

是否有选项(除了设置 SQL Server 内存使用的上限)来加快 SQL 释放内存的速度?

Jim*_*m B 2

首先了解 Windows 内存的工作原理(请参阅如何判断我的 Windows 服务器是否正在交换?)。

现在我们知道分页并不都是坏事,SQL Server 不会足够快地释放内存,以便 Windows 上的其他应用程序在我们认为合理的时间内满足较大内存峰值的要求。

这不会需要“几天”, SQL需要几天的时间才能受到影响;不是其他应用程序。另一个应用程序需要几个小时才能在内存中获得足够的可用页面,以便以可接受的速率运行(假设有很大的内存页面请求)。

一般来说,如果其他应用程序必须存在于具有 SQL Server 的计算机上,并且已知其他应用程序的内存需求存在变化,则最佳做法是设置 SQL 的内存限制。

我确实喜欢 SQL Server “表现良好”这句话。事实上,它表现得很好;(相对而言)需要很长时间才能做到这一点。