Skip to content
douyamumu edited this page Oct 18, 2012 · 1 revision

简介:
该patch使用SSD作为InnoDB Buffer pool和硬盘间的二级缓存,以提升IO性能,进而提升数据库的TPS。具有如下特点:
1.page写到SSD是顺序化的,没有随机写
2.使用哈希表进行索引,快速定位页在SSD上的位置,读性能好
3.使用一个刷新线程异步且自适应地将SSD中的dirty page刷回磁盘
4.可以合并一个页的多个版本,只做一次刷回
5.可缓存BP中从LRU链表被挤出来的clean page
6.支持压缩页
7.支持在线备份,可配合xtrabackup使用
8.重启后可快速恢复关闭前的状态
9.系统crash后能较快速恢复(与Flash Cache文件大小有关)

实现:
要点:顺序循环写;异步刷回硬盘;哈希定位读
Flash Cache内存控制结构如下:


   struct fc_struct{
	mutex_t			mutex; /*!< mutex protecting flash cache */
	hash_table_t*	        hash_table; /*!< hash table of flash cache blocks */
	mutex_t			hash_mutex; /* mutex protecting flash cache hash table */
	ulint			size; /*!< flash cache size */
	ulint			write_off; /*!< write to flash cache offset */
	ulint			flush_off; /*!< flush to disk this offset */
	ulint			write_round; /*!< write round */
	ulint			flush_round; /*!< flush round */
	fc_block_t* 	        block; /*!< flash cache block */
	...
   };
struct fc_block_struct{

ulint space:32; /!< tablespace id */
ulint offset:32; /
!< page number /
ulint fil_offset:32; /
!< flash cache page number /
ulint state:3; /
!< flash cache block state /
fc_block_t
hash; /!< hash chain */
unsigned is_aio_reading:1; /
!< if is in aio reading status */
};


write_off指示下一个page写入到Flash Cache文件上的位置,flush_off指示Flash Cache文件中下一个需要刷回Disk的page的位置。write_round和flush_round分别记录当前Flash Cache进行到第几轮循环,二者要么相等,要么write_round比flush_round大1。block数组大小为size(Flash Cache文件大小,以16KB页为单位),用于一对一的记录SSD上的Flash Cache文件中的每个页的状态:是否有效,是否需要刷回Disk等。fc_block_struct结构中的hash用于链接同一哈希值的该block,以便快速定位读。

配置:
innodb_flash_cache_adaptive_flushing #指定刷回线程是否开启自适应功能
innodb_flash_cache_backup_dir #指定Flash Cache备份时备份文件所在目录
innodb_flash_cache_backuping #需要在innodb_flash_cache_enable_write为OFF的前提下使用,设为1时开始备份
innodb_flash_cache_enable_migrate #指定是否允许BP中的Clean page在被挤出后缓存在Flash Cache文件中
innodb_flash_cache_enable_move #指定是否允许将Flash Cache文件中某个Clean page移动,以便不会被即将到来的写覆盖
innodb_flash_cache_enable_write #指定dirty page是否写到Flash Cache文件中
innodb_flash_cache_file #指定Flash Cache文件名
innodb_flash_cache_size #指定Flash Cache文件大小 |
innodb_flash_cache_warmup_table #第一次使用Flash Cache时,可指定某些表进行预热,如tpcc.*

Clone this wiki locally