MyException - 我的异常网
当前位置:我的异常网» SQL » SQL SERVER Buffer Pool扩张

SQL SERVER Buffer Pool扩张

www.MyException.Cn  网友分享于:2013-08-09  浏览:0次
SQL SERVER Buffer Pool扩展

 

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操作,并且读取时间较直接从硬盘读取数据快。

    

    

   

2楼MSSQL123
学习了,不知道这个特性
1楼牛腩
支持支持334

文章评论

程序员都该阅读的书
程序员都该阅读的书
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
Java程序员必看电影
Java程序员必看电影
如何成为一名黑客
如何成为一名黑客
鲜为人知的编程真相
鲜为人知的编程真相
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
代码女神横空出世
代码女神横空出世
 程序员的样子
程序员的样子
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
一个程序员的时间管理
一个程序员的时间管理
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
那些争议最大的编程观点
那些争议最大的编程观点
编程语言是女人
编程语言是女人
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序员必看的十大电影
程序员必看的十大电影
漫画:程序员的工作
漫画:程序员的工作
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员应该关注的一些事儿
程序员应该关注的一些事儿
每天工作4小时的程序员
每天工作4小时的程序员
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
10个调试和排错的小建议
10个调试和排错的小建议
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
程序员的鄙视链
程序员的鄙视链
我的丈夫是个程序员
我的丈夫是个程序员
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
我是如何打败拖延症的
我是如何打败拖延症的
中美印日四国程序员比较
中美印日四国程序员比较
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员和编码员之间的区别
程序员和编码员之间的区别
旅行,写作,编程
旅行,写作,编程
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
总结2014中国互联网十大段子
总结2014中国互联网十大段子
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有