简介
sql server 2014中另一个非常好的功能是,可以将ssd虚拟成内存的一部分,来供sql server数据页缓冲区使用。通过使用ssd来扩展buffer-pool,可以使得大量随机的iops由ssd来承载,从而大量减少对于数据页的随机iops和page-out。
ssd as buffer pool
ssd是固态硬盘,不像传统的磁盘有磁头移动的部分,因此随机读写的iops远远大于传统的磁盘。将ssd作为buffer pool的延伸,就可以以非常低的成本巨量的扩充内存。而传统的模式是内存只能容纳下热点数据的一小部分,从而造成比较大的page-out,如图1所示。
图1.大量随机的iops需要由磁盘阵列所承担
但如果考虑到将ssd加入计算机的存储体系,那么内存可以以非常低的成本扩展到约等于热点数据,不仅仅是提升了性能,还可以减少io成本,如图2所示。
图2.扩展后内存几乎能hold所有热点数据
由图1和图2的对比可以看出,扩展后可以使用更便宜的sata存储。此外,该特性是透明的,无需应用程序端做任何的改变。
此外,该特性为了避免数据的丢失,仅仅在作为缓冲区的ssd中存储buffer pool的clean page,即使ssd出现问题,也只需要从辅助存储中page in页即可。
最后,该特性对于numa进行了特别优化,即使拥有超过8个socket的系统,cpu也能无障碍的访问内存。
启用buffer pool extension
在sql server 2014总,启用buffer pool extension非常简单,仅仅需要拥有sysadmin权限后,输入一个t-sql语句即可,如图3所示。
图3.启用buffer pool extension
对应的,我们可以在物理磁盘中看到这个扩展文件,该文件的性能和windows的虚拟内存文件非常类似,如图4所示。
图4.对应的buffer pool扩展文件
但这里值得注意的是,我们启用的内存扩展无法小于物理内存或阈值,否则会报错,如图5所示。
图5.报错信息
对于该功能,sql server引入了一个全新的dmv和在原有的dmv上加了一列,来描述buffer pool extention,如图6所示。
图6.引入的新的dmv和对于原有dmv的更新
此外,对于该特性的监控,sql server还引入了大量与之相关的计数器,如图7所示。
图7.相关计数器
小结
sql server buffer pool extension给我们提供了以更低成本来满足更高企业级需求的可能,结合内存数据库,未来的可能性将无限延伸。