注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭研后台技术中心的博客

 
 
 
 
 

日志

 
 

Flash Cache for InnoDB  

来自insidemysql   2012-07-03 10:45:12|  分类: MySQL |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Flash Cache & Secondary Buffer Pool

之前的InnoSQL版本支持Secondary Buffer Pool技术,通过SSD设备来做辅助缓冲池。该技术在大规模读的应用环境中有着非常不错的性能表现,但是在TPC-C这类测试中,可能就显的比较平庸。因为他只是辅助缓冲池,而非真正意义的Flash Cache。

InnoSQL 5.5.13开始支持Flash Cache,虽然同样采用SSD作为一个Cache,但是两者的实现方式完全不同。其特点为:

  • 不仅可以对读进行Cache存,也可以对写进行Cache。
  • 可以进行merge write,大大减少了实际写页的次数。
  • 在SSD上无离散写操作
  • 预热时间大幅缩短

Flash Cache的原理和设计架构

在InnoDB存储引擎中,为了避免half-written的问题,采用了Doublewrite的设计方式。其工作方式为:在刷新128个页前(最多128个页),先顺序地将128个页写入到Doublewrite中,在确保写入后则进行页的实际写入(更详细的说明请见《MySQL技术内幕:InnoDB存储引擎》)。

InnoSQL的Flash Cache接管了原先Doublewrite的工作,并扩大了原先Doublewrite的尺寸。例如,我们可以拥有一个300G的Doublewrite。因为Doublewrite的特性,对于SSD的写入都是顺序的。当页刷新到Flash Cache后建立对应的Hash表,那么之后读也可能会命中到Flash Cache,因为刷新完成的脏页非常可能从缓冲池中移出。此外,当写入Flash Cache后,并不像Doublewrite那样去马上完成页的刷新操作,而是通过后台的Flash Cache Thread来完成这个操作。Flash Cache中可能存在一个页的多个副本,当从Flash Cache中刷新回磁盘时,如果这个页已经有新的版本了,那老版本的页将不进行刷新,这个操作称为merge write。

InnoSQL Flash Cache架构如下图所示:

测试

测试环境1:TPC-C

DB Size:~40G

InnoDB Buffer Pool: 12G

Command:  tpcc_start 127.0.0.1 tpcc root ” 500 16 1 3600

最终测试结果(TpmC):

2 Disk RAID1:  853.93

SSD:  3607.18

Flash Cache: 7610.05 ( merge write ratio:65.74% )

测试环境2:Sysbench

DB Size: ~20G

InnoDB Buffer Pool: 6G

Command: sysbench –test=oltp –db-driver=mysql –mysql-user=root –oltp-table-size=80000000 –oltp-dist-type=uniform –oltp-read-only=off –max-requests=0 –max-time=3600 –num-threads=32 run

这里Flash Cache的大小设置为了14G,因为Flash Cache+InnoDB Buffer Size等于了整个库的大小。这时测试的性能应该不低于数据文件全在SSD上的性能。因为Sysbench是一个读密集型的应用,因此Flash Cache并不能像之前TPCC的提升这么多。但是也比数据文件放在SSD上提高了20%。但此时我们只适用了14G的Flash Cache。

缺点

不支持XtraBackup这类工具,因为页有可能被存储在Flash Cache中。

总结

InnoSQL新的Flash Cache架构可以更为充分的利用SSD的特性,对读写各应用都能有更好的适应性。因此从InnoSQL 5.5.13开始将不再对Secondary Buffer Pool进行维护和开发。目前Flash Cache的开发只是出于初级阶段,之后将会有更多的特性支持。

  评论这张
 
阅读(871)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017