动态内存管理

Microsoft SQL Server 数据库引擎的默认内存管理方法可以获取尽可能多的内存而不会造成系统内存短缺。数据库引擎通过使用 Microsoft Windows 中的内存通知 API 来实现这一点。

SQL Server 的虚拟地址空间分为两个不同的区域:缓冲池占用的空间和其余空间。如果启用了 AWE 机制,缓冲池就可以驻留在 AWE 映射内存中,为数据库页提供更多的空间。

缓冲池用作 SQL Server 的主内存分配源。驻留在 SQL Server 进程中且没有使用 SQL Server 内存管理设备的外部组件(例如 COM 对象)将使用缓冲池占用的虚拟地址空间以外的内存。

启动 SQL Server 时,它将基于多个参数(例如系统的物理内存量、服务器线程数和各个启动参数)计算缓冲池的虚拟地址空间的大小。SQL Server 将为缓冲池保留计算得到的进程虚拟地址空间量,但它仅为当前负荷获取(提交)所需的物理内存量。

然后实例将继续获取支持工作负荷所需的内存。随着用户连接和运行查询的逐步增多,SQL Server 将按需获取更多的物理内存。SQL Server 实例将继续获取物理内存直到达到自己的 max server memory 分配目标或 Windows 指示不再有可用剩余内存;当该实例获取的内存超过 min server memory 设置并且 Windows 指示可用内存短缺时将释放内存。

随着在运行 SQL Server 实例的计算机上启动其他应用程序,这些应用程序将会占用内存,从而使可用物理内存量降到 SQL Server 目标以下。SQL Server 实例将调整其内存使用量。如果有其他应用程序停止运行而使可用内存增多,SQL Server 实例将增加其内存分配的大小。SQL Server 可以每秒释放并获取几 MB 的内存,这使它可以根据内存分配变化快速做出调整。