SQL 2014新功能介绍系列6 – 缓存池扩展 (Buffer Pool Extension)

SQL Server 2014缓存池扩展 (Buffer Pool Extension)功能可以将缓存池扩展到较快的SSD存储上。为内存比较紧张的系统提供了新的扩展途径。

Buffer Pool 扩展可以带来以下好处。

1. 提高随机I/O的吞吐量

2. 降低I/O延迟

3. 提高单位时间内处理事务的吞吐量

4. 显著地提高读性能

5. 以软件方式为客户实现了类似于混合硬盘的效果。

缓存池扩展支持以下两种模式

CW:只向SSD写入干净页。

DW:双重写,即同时向SSD和硬盘写入脏页。

下面2张图里,C: 干净页 D:脏页 R:随机 S:顺序

1) 顺序写总是直接写入硬盘,不会写入SSD

2) 干净页的随机写是写入SSD,因为既然是干净页,硬盘上已经有一份拷贝。

3) 当缓存池尚有空间时,缓存池扩展采用CW模式的,只对SSD只写入干净页。

4) 当缓存池空间已满,需要将一部分脏页刷到硬盘上的时候,它是DW模式的,脏页将同时写入SSD和硬盘。 

 

总的来说缓存池扩展对于读远远高于写的OLTP系统比较有帮助,对于以下环境,则帮助不大:

1.数据仓库。您应该考虑列存储而不是缓存池扩展

2.写入比较多的OLTP。

3.拥有大于64GB内存的服务器

以下是如何使用缓存池扩展的具体步骤:

首先检查SQL server最大内存的设置。建议将缓存池扩展的大小设为最大内存的16倍或以下。请先做好充分测试再实施到生产环境。

USE master

GO

 

EXEC sp_configure 'show advanced options', 1

RECONFIGURE WITH OVERRIDE

GO

 

EXEC sp_configure 'max server memory (MB)'

GO

 

/*

EXEC sp_configure 'max server memory (MB)', [VALUE (MB)]

RECONFIGURE WITH OVERRIDE

GO

*/

 

以下脚本启用了缓存池扩展到10GB:

USE master

GO

 

ALTER SERVER CONFIGURATION

SET BUFFER POOL EXTENSION ON

   
(FILENAME = 'E:\DB_Cache\SQL2014.BPE', SIZE = 10 GB);

GO

 

以下脚本为关闭缓存池扩展:

USE master

GO

 

ALTER SERVER CONFIGURATION

   
SET BUFFER POOL EXTENSION OFF;

GO

 

以下脚本为改变缓存池扩展的大小:

USE master

GO

 

ALTER SERVER CONFIGURATION

   
SET BUFFER POOL EXTENSION OFF;

GO

 

ALTER SERVER CONFIGURATION

SET BUFFER POOL EXTENSION ON

   
(FILENAME = 'F:\SSDCACHE\Example.BPE', SIZE = 20 GB);

GO

 

以下为缓存池扩展相关的DMV和perfmon counter,可用于检查设置和监控:

--DMV:

select * from sys.dm_os_buffer_pool_extension_configuration

select * from sys.dm_os_buffer_descriptors where is_in_bpool_extension = 1

 

--Perfmon counter:

SQL Server:Buffer Manager:Extension page reads/sec

SQL Server:Buffer Manager:Extension page writes/sec

SQL Server:Buffer Manager:Page reads/sec

SQL Server:Buffer Manager:Page writes/sec

SQL Server:Readahead pages/sec

 

这就是今天的分享,更多SQL 2014新功能介绍请持续关注本博客。 下周我们将会介绍针对基数估计的新设计(New Design for Cardinality Estimation).