SQLServer buffer pool extension

SQL Server 缓冲池扩展
介绍SQL Server 2014新增功能bufferpoolextension,利用SSD提升数据库性能。包括配置方法、实现原理及性能对比测试。

一、buffer pool extension 简介

"buffer pool extension"是 SQL Server 2014 版本引入的新功能,中文译名:缓冲池扩展
该功能支持将SSD硬盘作为数据库缓存,利用SSD优秀的随机读写性能,提高数据库的IO吞吐量。

二、buffer pool extension 基本使用方法

1.添加缓冲池扩展

alter server configuration
set buffer pool extension on (filename = 'E:\ssd_buffer_pool.bpe', size = 10GB)

本例中E盘为SSD盘,在E盘下创建一个10GB大小的缓冲池扩展文件: ssd_buffer_pool.bpe (名字可以随便取)。
命令执行成功后观察E盘,缓存文件创建成功。
在这里插入图片描述

2.查看缓冲池扩展信息

select * from sys.dm_os_buffer_pool_extension_configuration

在这里插入图片描述
查询结果显示上一步的添加操作已生效。

3.查询哪些页面缓存到扩展缓冲池中

select * from sys.dm_os_buffer_descriptors
where is_in_bpool_extension = 1

动态管理视图 sys.dm_os_buffer_descriptors 中有一个字段:is_in_bpool_extension,如果该字段为1,表示页面缓存在 buffer pool extension 中。
在这里插入图片描述

4. 撤销缓冲池扩展

alter server configuration
set buffer pool extension off

执行该命令后,数据库会收回SSD缓冲池扩展,之前创建的缓冲池扩展文件,也随之消失。
在这里插入图片描述

三、buffer pool extension 实现细节

1.SSD添加到 buffer pool 中后,buffer pool 中内容分为两部分:

  • 原本就处于DRAM内存中的部分,称作 L1 级别缓存
  • SSD扩展部分,称作 L2 级别缓存

2.L2级别缓存,仅存储干净的页面。如果L2中的页面需要修改,缓冲区管理器会处理 L1 和 L2 之间的干净页移动。

3.如果 L1 级别空间足够,数据库优先将页面缓存到 L1,只有当 L1 空间不足时,才会缓存到 L2。

官网给出的 buffer pool 架构图:
在这里插入图片描述

四、buffer pool extension 性能测试

1.环境准备
(1) 按照上文步骤,添加好缓冲池扩展

(2) 为了模拟页面位于SSD 扩展缓存中的情况,尽量将数据库引擎的"最大服务器内存"设置为较小的值。这样当 L1 内存级别空间不足时,就会将页面缓存到 L2 级别的SSD。
在这里插入图片描述

(3) 用如下脚本生产数据

create table dbo.t1(
	ID			INT primary key, 
	NAME		char(8000)
)
GO

declare @i int
declare @name varchar(20)
set @i = 1
begin transaction
while @i <= 100000
begin
	set @name = 'aaa' + convert(varchar, @i);
	insert into dbo.t1 values (@i, @name);
	set @i = @i + 1;
	
	if @i % 100 = 0
	begin
		commit;
		begin transaction;
	end
end
commit
GO

(4) 数据生产完毕后,通过 sys.dm_os_buffer_descriptors 视图,结合 %%physloc%% rowid函数算出页面ID,找出几条位于 buffer pool extensioin 即 L2 SSD 区域的数据,之后就通过这几条数据,分别测试其位于L2 SSD、位于 L1 内存、位于磁盘时的读取速度。
本例中选取了三条数据:“id=81291, 47377, 81000”,初始情况下这三条数据位于 L2 SSD 扩展缓存区的3个不同页面,且这3个页面不连续(为了更好的比对性能差异)。


select %%physloc%% as rowid, 
  convert(int, substring(%%physloc%%, 4, 1) + substring(%%physloc%%, 3, 1) 
               + substring(%%physloc%%, 2, 1) + substring(%%physloc%%, 1, 1)) as page_id, 
  * 
from dbo.t1 
where id in (81291, 47377, 81000)
order by page_id


select database_id, file_id, page_id, page_level, is_modified, is_in_bpool_extension
from sys.dm_os_buffer_descriptors
where is_in_bpool_extension = 1
  and page_id in (477406, 511158, 730)
order by page_id

在这里插入图片描述

(5) 打开IO性能统计开关、TIME统计开关,便于性能比对

set statistics io on
go

set statistics time on
go

2.测试从 buffer pool extension, 即 SSD 中读取数据性能
在这里插入图片描述

  • 物理读取:0 次
  • 执行时间:17 毫秒

3.测试从内存读取数据性能
为了将位于 L2 SSD 中的页面移动到 L1 内存中,直接撤销缓冲区扩展,这样缓冲区管理器就会将 L2 中的页面移动到 L1中。

-- 撤销 "extension buffer pool"
alter server configuration
set buffer pool extension off

-- 验证页面从SSD迁移到了内存
select database_id, file_id, page_id, page_level, is_modified, is_in_bpool_extension
from sys.dm_os_buffer_descriptors
where page_id in (477406, 511158, 730)
order by page_id

在这里插入图片描述

再次读取这三条记录
在这里插入图片描述

  • 物理读取: 0 次
  • 执行时间: 13 毫秒

4.测试从磁盘读取数据性能
清除所有干净的缓存页面,迫使从磁盘读取数据

--从缓存中清除干净的页面
dbcc dropcleanbuffers
go

--验证页面已不在缓存中
select database_id, file_id, page_id, page_level, is_modified, is_in_bpool_extension
from sys.dm_os_buffer_descriptors
where page_id in (477406, 511158, 730)
order by page_id

在这里插入图片描述

测试从磁盘中读取数据
在这里插入图片描述

  • 物理读取: 7 次
  • 执行时间: 100 毫秒

5.性能比对

物理读取(次)执行时间(毫秒)
L1:内存, buffer pool013
L2:SSD, buffer pool extension017
磁盘7100

参考文章
[1] 官网:Buffer pool extension
[2] Buffer pool扩展简介

2025-06-19 17:34:48.74 Server Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64) Sep 24 2019 13:48:23 Copyright (C) 2019 Microsoft Corporation Enterprise Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 26100: ) (Hypervisor) 2025-06-19 17:34:48.75 Server UTC adjustment: 8:00 2025-06-19 17:34:48.75 Server (c) Microsoft Corporation. 2025-06-19 17:34:48.75 Server All rights reserved. 2025-06-19 17:34:48.75 Server Server process ID is 14252. 2025-06-19 17:34:48.75 Server System Manufacturer: 'LENOVO', System Model: '82YX'. 2025-06-19 17:34:48.75 Server Authentication mode is MIXED. 2025-06-19 17:34:48.75 Server Logging SQL Server messages in file 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\ERRORLOG'. 2025-06-19 17:34:48.75 Server The service account is 'NT Service\MSSQLSERVER'. This is an informational message; no user action is required. 2025-06-19 17:34:48.75 Server Registry startup parameters: -d C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\master.mdf -e C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\ERRORLOG -l C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\mastlog.ldf 2025-06-19 17:34:48.75 Server Command Line Startup Parameters: -s "MSSQLSERVER" 2025-06-19 17:34:48.75 Server SQL Server detected 1 sockets with 8 cores per socket and 16 logical processors per socket, 16 total logical processors; using 16 logical processors based on SQL Server licensing. This is an informational message; no user action is required. 2025-06-19 17:34:48.75 Server SQL Server is starting at normal priority base (=7). This is an informational message only. No user action is required. 2025-06-19 17:34:48.75 Server Detected 38749 MB of RAM. This is an informational message; no user action is required. 2025-06-19 17:34:48.75 Server Using conventional memory in the memory manager. 2025-06-19 17:34:48.75 Server Page exclusion bitmap is enabled. 2025-06-19 17:34:48.87 Server Buffer Pool: Allocating 8388608 bytes for 4917325 hashPages. 2025-06-19 17:34:48.88 Server Default collation: SQL_Latin1_General_CP1_CI_AS (us_english 1033) 2025-06-19 17:34:48.90 Server Buffer pool extension is already disabled. No action is necessary. 2025-06-19 17:34:48.93 Server Query Store settings initialized with enabled = 1, 2025-06-19 17:34:48.93 Server The maximum number of dedicated administrator connections for this instance is '1' 2025-06-19 17:34:48.93 Server This instance of SQL Server last reported using a process ID of 7392 at 2025/6/19 17:34:17 (local) 2025/6/19 9:34:17 (UTC). This is an informational message only; no user action is required. 2025-06-19 17:34:48.94 Server Node configuration: node 0: CPU mask: 0x000000000000ffff:0 Active CPU mask: 0x000000000000ffff:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required. 2025-06-19 17:34:48.95 Server Using dynamic lock allocation. Initial allocation of 2500 Lock blocks and 5000 Lock Owner blocks per node. This is an informational message only. No user action is required. 2025-06-19 17:34:48.95 Server Lock partitioning is enabled. This is an informational message only. No user action is required. 2025-06-19 17:34:48.95 Server In-Memory OLTP initialized on standard machine. 2025-06-19 17:34:48.96 Server [INFO] Created Extended Events session 'hkenginexesession' 2025-06-19 17:34:48.96 Server Database Instant File Initialization: disabled. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required. 2025-06-19 17:34:48.96 Server Total Log Writer threads: 2. This is an informational message; no user action is required. 2025-06-19 17:34:48.98 Server clwb is selected for pmem flush operation. 2025-06-19 17:34:48.98 Server Software Usage Metrics is disabled. 2025-06-19 17:34:48.98 spid9s Starting up database 'master'. 2025-06-19 17:34:48.99 spid9s There have been 256 misaligned log IOs which required falling back to synchronous IO. The current IO is on file C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\master.mdf. 2025-06-19 17:34:49.07 Server CLR version v4.0.30319 loaded. 2025-06-19 17:34:49.10 Server Common language runtime (CLR) functionality initialized using CLR version v4.0.30319 from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\.
最新发布
06-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

duanbeibei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值