缓冲池扩展

适用于:Windows 上的 SQL Server

缓冲池扩展将 SSD 存储与数据库引擎缓冲池集成,以提高数据库性能,而不会产生额外的内存成本。

缓冲池扩展在每个 SQL Server 版本中都不可用。 有关详细信息,请参阅 SQL Server 2025 的版本和支持的功能

缓冲池扩展的优点

由于磁盘 I/O 操作可能需要相对较长的时间才能完成,因此它们在许多工作负荷中都是性能瓶颈。

减少磁盘 I/O 的典型方法是添加更多内存以用作数据缓存。 虽然很有帮助,但此方法的缺点是内存成本高。

缓冲池扩展功能使用非易失性存储(例如本地 SSD 驱动器)扩展缓冲池缓存。 使用此扩展,缓冲池可以容纳更大的数据库工作集,将较慢的远程 I/O 的一个重要部分替换为更快的本地 SSD I/O。 由于 SSD 的延迟较低和 I/O 性能更好,缓冲池扩展可以提高性能,尤其是使用较慢的远程 I/O 系统。

下面的列表说明了缓冲池扩展功能的优点。

  • I/O 吞吐量增加
  • I/O 滞后时间缩短
  • 事务吞吐量提高
  • 由于采用更大的混合缓冲池,读取性能提高
  • 可以利用当前和未来低成本内存驱动器的缓存体系结构

缓冲池扩展概念

以下术语适用于缓冲池扩展功能。

术语 说明
缓冲区 在数据库引擎中,缓冲区是内存中的 8 KB 页,大小与数据或索引页相同。 因此,缓冲区缓存被划分为多个 8-KB 页。 页面保留在缓冲区缓存中,直到缓冲区管理器需要缓冲区区域才能读取更多数据。 仅当数据被修改时,数据才会写回到磁盘。 这些内存中已修改的页称为脏页。 当页面等效于磁盘上的数据库映像时,页面是干净的。 在将缓冲区缓存中的数据写回磁盘之前,可对其进行多次修改。
缓冲池 也称为缓冲区缓存。 所有数据库将缓冲池用作其缓存数据页的全局资源。 启动过程或sp_configure动态重新配置数据库引擎实例,以确定缓冲池缓存的最大和最小大小。 此大小确定实例可以在缓冲池中缓存的最大页数。

外部内存压力可以减少缓冲池的大小,并限制缓冲池扩展可以缓存的内存。
检查点 检查点会创建一个已知的正常点,在意外关闭或崩溃后的恢复过程中, 数据库引擎 可以从该点开始应用事务日志中包含的更改。 检查点将脏页和事务日志信息从内存写入磁盘。 有关详细信息,请参阅 数据库检查点(SQL Server)

缓冲池扩展体系结构

通过使用缓冲池扩展,可以使用 SSD 存储作为内存子系统的扩展,而不是磁盘子系统的一部分。 缓冲池扩展文件使缓冲池管理器能够同时使用 DRAM 和 NAND 闪存来维护 SSD 上页面的更大缓冲池。

此体系结构创建一个多层缓存层次结构,级别 1(L1)作为 DRAM,级别 2(L2)作为 SSD 上的缓冲池扩展文件。 仅将干净页写入 L2 缓存,以帮助确保数据安全。 缓存管理器负责 L1 和 L2 缓存之间的干净页移动。

下图提供了相对于其他数据库引擎组件的缓冲池的高级体系结构概述。

SSD 缓冲池扩展体系结构的关系图。

启用缓冲池扩展时,请在 SSD 上指定缓冲池缓存文件的大小和文件路径。 此文件是 SSD 上的连续存储范围,在启动数据库引擎实例期间静态配置。 只有在禁用缓冲池扩展功能时,才能更改文件配置参数。 禁用缓冲池扩展时,系统会从注册表中删除所有相关配置设置。 系统在关闭数据库引擎时删除缓冲池扩展文件。

缓冲池扩展配置

使用 ALTER SERVER CONFIGURATION 配置缓冲池扩展。

系统会根据数据库引擎实例在启动时可用的物理内存,强制执行缓冲池扩展的最小和最大大小限制。

最大尺寸

最大缓冲池扩展大小取决于SQL Server版本,对于物理和虚拟机不同。

如果配置的大小超过最大值,则数据库引擎返回错误 864,并且未启用缓冲池扩展。

  • SQL Server企业版、企业开发人员版和开发人员版最多支持物理内存 32 倍。

  • SQL Server物理计算机上的标准和标准开发人员版本最多支持物理内存 4 倍。

    • SQL Server 2022(16.x)和早期版本中最多为 512 GB。

    • SQL Server 2025(17.x)及更高版本中最多 1 TB。

  • SQL Server虚拟机上的标准和标准开发人员版本最多支持物理内存 16 倍。

有关详细信息,请参阅 SQL Server 2025 的版本和支持的功能

最小尺寸

缓冲池扩展大小必须大于最小物理内存和 最大服务器内存(MB) 值。 如果配置的大小小于该最小值,则数据库引擎将引发错误 868。 如果在实例启动时配置的最小大小小于此最小值,则会记录错误 861,并且未启用缓冲池扩展。

配置更改行为

在启用该扩展时,可以将 max server memory (MB) 增加到高于缓冲池扩展大小的值。 数据库引擎记录信息性消息(错误 5866),并应用更改。 但是,由于新值违反了最小大小要求,因此下次重启实例时,将禁用缓冲池扩展。

如果启用大小低于 max server memory (MB)的缓冲池扩展,操作将失败并显示错误 868。

缓冲池扩展最佳做法

请考虑采用以下最佳做法:

  • 首次启用缓冲池扩展后,重启数据库引擎实例以获取最大性能优势。
  • 设置缓冲池扩展,以便物理内存大小与缓冲池扩展的大小之间的比率为 1:16 或更少。 1:4 到 1:8 范围内的较低比率可能是最佳。 有关设置 max server memory (MB) 选项的信息,请参阅 服务器内存配置选项
  • 在生产环境中实现缓冲池扩展之前,请彻底测试缓冲池扩展。 进入生产环境后,请避免对文件进行配置更改或关闭该功能。 这些活动可能对服务器性能产生负面影响,因为禁用该功能时缓冲池的大小明显减少。 禁用后,在重新启动 SQL Server 实例之前,不会回收用于支持该功能的内存。 但是,如果重新启用该功能,则会重复使用内存,而无需重启实例。

监控缓冲池扩展

您可以使用以下动态管理视图来显示缓冲池扩展的配置并返回有关扩展中的数据页的信息。

SQL Server, Buffer Manager 对象中提供了性能计数器,用于跟踪缓冲池扩展文件中的数据页。 有关详细信息,请参阅SQL Server Buffer Manager 对象

以下扩展事件可用于深入监视缓冲池扩展。

Event 说明
buffer_pool_extension_pages_written 在将页或页组从缓冲池逐出并写入缓冲池扩展文件时激发。
buffer_pool_extension_pages_read 在将页从缓冲池扩展文件读取到缓冲池时激发。
buffer_pool_extension_pages_evicted 在将页从缓冲池扩展文件中逐出时激发。
buffer_pool_eviction_thresholds_recalculated 重新计算驱逐阈值时触发。