登录 / 注册
IT168技术开发频道
IT168首页 > 技术开发 > 技术开发技术 > 正文

SQL Server 2014新特性:SSD缓冲区扩展

2014-05-13 09:33    it168网站原创  作者: 宋沄剑 编辑: 王玉圆

  【IT168 专稿】在SQL Server正常的操作周期中,数据库从磁盘读入内存,这就是所谓的“Clean”数据,在内存中的数据页被修改后,该页就会被标记为“Dirty”。最终,所有的脏数据库都会被写回磁盘并将所有页重新标记为“Clean”,当数据缓冲区面临压力时,会将“Clean”数据从数据缓冲区中清除掉,当下次有查询涉及到相关数据时,再从磁盘中将数据读入缓冲区。

  当频繁活动的“热”数据量小于缓冲区大小时,这种机制没有任何问题。但如果频繁活动的“热”数据量大于缓冲区大小时,则会给IO子系统带来不小的压力。

  SQL Server 2014中的一个新特性,可以将SSD虚拟成缓冲区的一部分,来供SQL Server数据页缓冲区使用,这种机制就是所谓的缓冲区扩展(BPE)。缓冲区扩展的理念不仅仅是利用快速、低延迟的持久化存储扩展缓冲区,而且是利用磁盘针对SQL Server存储“Clean”数据,尤其是被内存缓冲区Page-Out出来的数据。通过使用SSD来扩展数据缓冲区(Buffer-Pool),可以使得大量随机的IOPS由SSD缓冲区扩展来承载,从而大量减少对于IO子系统的压力。

  一、为什么需要缓冲区扩展

  SSD是固态存储,不像传统的磁盘有磁头移动的部分,因此随机读写的IOPS远远大于传统的磁盘。将SSD作为Buffer Pool的延伸,缓冲区的大小就不仅仅局限于物理内存,还可以使用更加低成本的SSD存储扩充缓冲区。传统的模式是只利用内存作为缓冲区容纳热数据,从而在缓冲区不足以容纳热数据时,造成比较大的Page-Out,给IO子系统带来较大压力,如图1所示。

  SQL Server 2014新特性:SSD缓冲区扩展

▲图1.大量随机的IOPS需要由磁盘阵列所承担

  由图1可以看出,数据库系统会将随机IO操作和顺序IO操作(OLAP或日志)分离,热数据(Working Set)在缓冲区和IO子系统之间交换。在热数据大于物理内存很多时,额外的压力将会由IO子系统承担,从而影响了整个数据库系统的吞吐量。

  如果考虑到将SSD加入数据库缓冲区的存储体系中,此时缓冲区以非常低的成本扩展到热数据,此时缓冲区的压力不会波及到IO子系统,而是相较于内存成本更低廉的SSD存储,如图2所示。

SQL Server 2014新特性:SSD缓冲区扩展
▲图2.将缓冲区扩展到约等同于热数据大小

  由图1和图2的对比可以看出,扩展后由于缓冲区的压力不会波及到IO子系统,对IO子系统的吞吐量和IOPS要求降低,因此IO子系统可以使用成本更加低廉的SATA存储替代SAS存储阵列。此外,该特性对应用程序透明,无需应用程序做任何修改。

  前文提到,SQL Server的BPE功能不仅仅是像虚拟内存那样对内存做一个简单的扩充,而是针对SQL Server和SSD特性的做了优化。首先,SSD存储写的寿命是有限的,因此SQL Server BPE通常只利用SSD存储“ Clean”页,从而SSD会承载更多的读负载而不是写负载,延长SSD的寿命。另一点是SSD存储相对于内存更容易损坏,利用SSD存储“Clean”页,这样一来即使SSD块出现损坏,只需要从IO子系统重新读取数据即可,不会造成数据丢失。

  最后,BPE对于NUMA进行了特别优化,即使拥有超过8个Socket的系统,CPU也能无障碍的访问内存。

  • IT168企业级IT168企业级
  • IT168文库IT168文库

扫码送文库金币

编辑推荐
系统架构师大会
系统架构师大会
点击或扫描关注
IT168企业级微信关注送礼
IT168企业级微信关注送礼
扫描关注
首页 评论 返回顶部