标签:buffer pool extension 缓冲池扩展 缓冲区
SQL Server 2014新功能 -- 缓冲池扩展(Buffer Pool Extension)
支持版本
缓冲池扩展(Buffer Pool Extension)此功能仅可用于64位 SQL Server 2014 Enterprise/Business Intelligence/Standard版本。
术语解释
缓冲区
在 SQL Server 中,一个缓冲区就是一个 8 KB 大小的内存页,其大小与一个数据页或索引页相同。 因此,缓冲区缓存被划分为多个 8KB 页。 缓冲区缓存中会保留一页,直到缓冲区管理器需要该缓冲区读入更多数据。 数据只有在被修改后才重新写入磁盘。 这些内存中已修改的页称为脏页。 当一页等同于它在磁盘上的数据库映像时,该页就是干净页。 在将缓冲区缓存中的数据写回磁盘之前,可对其进行多次修改。
缓冲池
也称为缓冲区缓存。 缓冲池是一个由所有数据库共享的全局资源,用于存放其缓存数据页。 缓冲池缓存的最大和最小大小是在启动期间或使用 sp_configure 动态重新配置 SQL Server 实例时确定的。 此大小确定了运行的实例中在任何时候都可以缓存在缓冲池中的最大页数。
缓冲池扩展的优点
1. 提高随机I/O的吞吐量
2. 降低I/O延迟
3. 提高单位时间内处理事务的吞吐量
4. 显著地提高读性能
5. 以软件方式为客户实现了类似于混合硬盘的效果。
缓冲池扩展详细信息
SSD 存储用作内存子系统的扩展而不是磁盘存储子系统的扩展。 也就是说,通过缓冲池扩展文件,缓冲池管理器可以使用 DRAM 和 NAND 闪存,在由固态硬盘支持的非易失性随机存取内存中保持一个大得多的温热页缓冲池。 这会在固态硬盘上创建一个多级缓存层次结构,级别 1 (L1) 作为 DRAM,级别 2 (L2) 作为缓冲池扩展文件。 仅将干净页写入 L2 缓存,以帮助确保数据安全。 缓冲区管理器会处理 L1 和 L2 缓存之间的干净页移动。
下图所示为缓冲池相对于其他 SQL Server 组件的高级体系结构概览。
启用缓冲池扩展后,该功能会指定固态硬盘上缓冲池缓存文件的大小和文件路径。 此文件是固态硬盘上的一个连续存储范围,是在 SQL Server 实例启动期间静态配置的。 只有在禁用了缓冲池扩展功能的情况下,才能修改此文件的配置参数。 禁用缓冲池扩展后,将从注册表中删除所有相关的配置设置。 SQL Server 实例关闭时,将会删除缓冲池扩展文件。
缓存池扩展支持以下两种模式
CW:只向SSD写入干净页。
DW:双重写,即同时向SSD和硬盘写入脏页。
1) 顺序写总是直接写入硬盘,不会写入SSD
2) 干净页的随机写是写入SSD,因为既然是干净页,硬盘上已经有一份拷贝。
3) 当缓存池尚有空间时,缓存池扩展采用CW模式的,只对SSD只写入干净页。
4) 当缓存池空间已满,需要将一部分脏页刷到硬盘上的时候,它是DW模式的,脏页将同时写入SSD和硬盘。
应用场景
总的来说缓存池扩展对于读远远高于写的OLTP系统比较有帮助,对于以下环境,则帮助不大:
1.数据仓库。您应该考虑列存储而不是缓存池扩展
2.写入比较多的OLTP。
3.拥有大于64GB内存的服务器
最佳做法
我们建议您遵循以下最佳做法。
1) 缓冲池扩展大小最大可为 max_server_memory 值的 32 倍。 我们建议物理内存 (max_server_memory) 的大小与缓冲池扩展的大小之比不应超过 1:16。 介于 1:4 至 1:8 之间的比率是最佳的。 有关设置 max_server_memory 选项的信息,请参阅“服务器内存”服务器配置选项。
2) 在生产环境中实现之前,应彻底测试缓冲池扩展。 处于生产过程中时,请避免对该文件进行配置更改或关闭该功能。 因为禁用该功能时会大大减小缓冲池大小,所以这些活动可能会对服务器性能产生负面影响。 禁用时,不回收用于支持该功能的内存,直到重新启动 SQL Server 的实例。 但是,如果重新启用该功能,将重用内存而不必重新启动实例。
如何使用缓存池扩展的具体步骤
首先检查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 Server Deep Dives” 博客,请务必保留此出处http://ultrasql.blog.51cto.com/9591438/1631022
SQL Server 2014新功能 -- 缓冲池扩展(Buffer Pool Extension)
标签:buffer pool extension 缓冲池扩展 缓冲区
原文地址:http://ultrasql.blog.51cto.com/9591438/1631022