Mysql快速学习——InnoDB的内存缓冲池Change Buffer

2. Change Buffer

写请求的处理流程

(1)如果索引页不在buffer pool中, 则先把索引页,从磁盘加载到缓冲池,一次磁盘随机读操作;
(2)修改缓冲池中的页,一次内存操作;
(3)写入redo log,一次磁盘顺序写操作;


写请求处理

是否会出现一致性问题呢?

不会, 因为:
(1)读取,会命中缓冲池的页;
(2)缓冲池LRU数据淘汰,会将“脏页”刷回磁盘;
(3)数据库异常奔溃,能够从redo log中恢复数据;


利用Change Buffer进行优化

上述场景中, 被读取的数据没有命中缓冲池的时候,会先从磁盘索引页到缓冲池中, 这样至少产生一次磁盘IO,对于写多读少的业务场景,性能压力会剧增, 于是InnoDB引入了Change Buffer:

  • 当对页进行了写操作,并不会立刻将磁盘页加载到缓冲池
  • 先把页的写操作记录到缓冲变更池(buffer changes)
  • 等未来数据被读取时,再将数据合并(merge)恢复到缓冲池中

写缓冲的目的是降低写操作的磁盘IO,提升数据库性能。


Change Buffer

在内存中,Change Buffer占用Buffer Pool的一部分。在磁盘上,Change Buffer是系统表空间的一部分,其中的索引会在关闭数据库服务器时更改。


Change Buffer相关参数配置
  • 配置Change Pool最大大小
    ---innodb_change_buffer_max_size: 允许将Change Buffer的最大大小配置为缓冲池总大小的百分比。默认情况下, innodb_change_buffer_max_size设置为25.最大设置为50。
  • 配置Change Buffer的适用范围
    ---innodb_change_buffering: all | none | inserts | deletes | changes | purges

你可能感兴趣的:(Mysql快速学习——InnoDB的内存缓冲池Change Buffer)