Buffer Pool扩展简介

Buffer Pool扩展是buffer pool 和非易失的SSD硬盘做连接。以SSD硬盘的特点来提高随机读性能。

在Buffer Pool 扩展之前,SQL Server 从磁盘中读入数据,并且存放在buffer pool中以供读取和修改,修改完之后脏数据还是放在buffer pool中,当内存紧张时,lazy write把脏数据写入磁盘,并且释放内存页。当再次使用当前数据时,再一次从磁盘读取数据到内存。这样会导致大量的IO操作,影响性能。对于这类IO操作频繁造成的性能问题,我们通常采用的方法是加内存,较少IO操作。

SQL SERVER 2014新增加了Buffer Pool的扩展特性,使用SSD硬盘扩展缓存容量;

SSD作为Buffer Pool的扩展,可以很好的解决因频繁读取数据引发的系统大量IO操作问题。 Buffer pool在SSD上创建一个缓冲文件,该文件与内存一起构成多层的缓存区,如下图:

其中第一层为内存构成的缓冲池,第二层为扩展的后备存储区。在L2上只存储干净的数据,为读提供缓存,不提供脏数据的缓存。这样的设计让我们不用担心SSD出现损坏的情况,当SSD出现损坏时,只是我们的缓存结构回到了加扩展前的状态,之前缓存在SSD上的数据,只需要从磁盘上再读取进内存。

Buffer Pool扩展实现

在SSD盘上设置扩展缓存区:

alter server configuration

set buffer pool extension on

(filename = 'I:\EXAMPLE.BPE', size= 4GB )

执行该命令后,在SSD盘上回生成一个EXAMPLE的文件,如下图:

撤销在SSD盘上设置的扩展缓存区:

alter server configuration

set buffer pool extension off

撤销缓冲池扩展后,将从注册表中删除所有相关的配置设置。SQL Server 实例关闭时,将会删除缓冲池扩展文件。

扩展缓存区注意事项

设置缓存区的时候,缓冲池扩展大小最大可为 max_server_memory 值的 32 倍。建议物理内存 (max_server_memory) 的大小与缓冲池扩展的大小之比不应超过 1:16。 介于 1:4 至 1:8 之间的比率是最佳的。

Buffer Pool扩展的优势

为了验证Buffer Pool扩展的作用,我们做了3个场景的数据读取,并对比磁盘物理读取次数与执行时间。

数据在磁盘上,从磁盘读取数据。

该种场景是在语句执行时,数据存储在磁盘上,执行步骤如下:

  • 使用 dbcc dropcleanbuffers 命令清空 Buffer  Pool 中的数据
  • 开启IO 统计 set statistics io on
  • 执行查询语句

从上图可以看出,当数据在磁盘上时,该查询执行了2次物理读即从磁盘读取了2页的数据。

从上图可以看出,该语句读持续了169毫秒。

数据在内存缓存中,从内存读取数据

该种场景是在语句执行时,数据在内存缓存上:

  • 执行查询语句,数据从磁盘读取到缓存
  • 开启IO 统计 set statistics io on
  • 再次执行语句,查看IO信息与执行时间

从上图可以看出,当数据在内存缓存上时,该查询执行了0次物理读。

从上图可以看出,该语句读持续了2毫秒。

数据在SSD扩展盘上有缓存,从SSD缓存读取数据

该种场景是在语句执行时,数据存储在Buffer Pool扩展 SSD硬盘上:

定位当前查询的数据所在的页,执行查询,使用 %%physloc%%获取当前记录行对应的标记信息(0x85E5000001000000)

标记信息是十六进制,将其转换为十进制数字,该标记0x后8为表示所在的页号;在转换的过程中这8位数字需要做个顺序调整,如上图中的值(0x85E5000001000000)需要转换为如下计算方式:

select cast(0x0000e585 as int )

获取页号后执行如下语句查看该页在Buffer Pool 中的情况。

select * from sys.dm_os_buffer_descriptors a where  a.page_id='58757'

从如上执行结果可以看出,58757 页对应的is_in_bpool_extension值为1,说明该页存储在Buffer Pool 扩展上。

执行查询语句,查看IO信息,如下图:

从上图可以看出,当数据在Buffer Pool 扩展有缓存时,该查询执行了0次物理读。

从上图可以看出,该语句读持续了49毫秒。

结论

通过同一环境中的如上三个场景测试,测试结果如图:

 

物理读次数

持续时间

数据页在磁盘

2次

169毫秒

数据页缓存在内存

0

2毫秒

数据页缓存在SSD Buffer Pool扩展

0

49毫秒

通过如上测试,我们知道使用SSD Buffer Pool扩展后,当内存不足时内存中的干净数据会移至SSD Buffer Pool扩展上,此时再次读取这些数据的时候降低了IO操作,并且读取时间较直接从硬盘读取数据快。

SQL SERVER Buffer Pool扩展的更多相关文章

  1. SQL Server 2014新特性——Buffer Pool扩展

    Buffer Pool扩展 Buffer Pool扩展是buffer pool 和非易失的SSD硬盘做连接.以SSD硬盘的特点来提高随机读性能. 缓冲池扩展优点 SQL Server读以随机读为主,S ...

  2. 如果正确读取SQL Server中的扩展事件?

        SQL Server中使用扩展事件捕捉所需的信息后,可以选择存放的位置.比如说内存或文件中,但无论存在哪里,其本质都是一个大XML.因此在SQL Server中读取该XML就是解析扩展事件结果 ...

  3. sql server 常用的扩展存储过程

    sql server 里面提供了丰富的系统存储过程来辅助我们管理数据库以及开发.今天分享介绍一些常用的数据库扩展存储过程 xp_cmdshell 这个大家都比较熟悉了,使用xp_cmdshell 可以 ...

  4. SQL SERVER中的扩展属性

    以前在SQL SERVER建表时,总看到扩展属性,但一直未使用过.今天研究下: 增加扩展属性: 语法: sp_addextendedproperty [ @name = ] { 'property_n ...

  5. SQL Server中的扩展事件学习系列

    SQL Server 扩展事件(Extented Events)从入门到进阶(1)——从SQL Trace到Extented Events SQL Server 扩展事件(Extented Event ...

  6. SQL Server -查看数据库扩展属性

    1.fn_listextendedproperty 函数可以基于对象类型显示单个数据库对象或数据库中所有对象的扩展属性.例如,可以返回表或表中所有列的扩展属性. A.下面的示例显示了数据库本身设置的所 ...

  7. SQL Server 2014新特性探秘(2)-SSD Buffer Pool Extension

    简介     SQL Server 2014中另一个非常好的功能是,可以将SSD虚拟成内存的一部分,来供SQL Server数据页缓冲区使用.通过使用SSD来扩展Buffer-Pool,可以使得大量随 ...

  8. SSD Buffer Pool Extension

    SSD Buffer Pool Extension 简介 SQL Server 2014中另一个非常好的功能是,可以将SSD虚拟成内存的一部分,来供SQL Server数据页缓冲区使用.通过使用SSD ...

  9. 浅谈SQL Server 对于内存的管理

    简介 理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理. 二级存储(secondary storage) ...

随机推荐

  1. 第二章完结,包含exam练习

    正则方程(Normal Equation) 梯度下降是最小化代价函数\(J(\theta)\)的一种方式,这里提出了另一种方式即正则方式不使用迭代方式:\(\theta = (X^TX)^{-1}X^ ...

  2. MongoDB--数据库与Collection注意事项

    <h2>    <strong>注意事项:</strong></h2>1.数据库名注意应该全部小写,不能包含空格,最大长度为64K名称<br /& ...

  3. 自动清理SQLServerErrorLog错误日志避免太大

    问题描述:开启SQLServer自动备份后,备份文件越来越多,有没有及时清理,导致服务器空间不足,备份出错,以至于出现几个G的ErrorLog文件,影响系统的登录管理. 解决办法:定期清理SQLSer ...

  4. C. Karen and Game

    C. Karen and Game time limit per test 2 seconds memory limit per test 512 megabytes input standard i ...

  5. oracle数据库的编码

    --oracle数据库的编码select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';--oracle客户端编 ...

  6. java高并发锁的3种实现

    初级技巧 - 乐观锁 乐观锁适合这样的场景:读不会冲突,写会冲突.同时读的频率远大于写. 以下面的代码为例,悲观锁的实现: Java代码   public Object get(Object key) ...

  7. Mac QQ 怎么清除聊天记录

    在 Mac 电脑上登录 QQ 以后,点击顶部菜单中“应用”下的“消息管理器”选项,如图所示

  8. 【Android Developers Training】 43. 序言:管理音频播放

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  9. 8.javaweb之session

    session是客户端和服务端的一次会话 web的session是指用户在浏览某个网站时,从进入网站到关闭浏览器的这段时间,uyejiushi用户浏览这个网站所花费的时间. session是一个时间的 ...

  10. Lniux下安装mysql----编译版

    ####安装mysql-5.7.10rpm -e --nodeps mysqlrpm -e mysqlclient10useradd -g mysql -s /sbin/nologininstall_ ...