写缓存(Change Buffer) 是一种特殊的数据结构,用于在对数据变更时,如果数据所在的数据页没有在 buffer pool 中的话,在不影响数据一致性的前提下,InnoDB 引擎会将对数据的操作缓存在 Change Buffer 中,这样就省去了从磁盘中读入这个数据页。
将数据页从磁盘读入内存中涉及随机 IO 访问,这也是数据库里面成本最高的操作之一,而利用写缓存(Change Buffer)可以减少 IO 操作,从而提升数据库性能。
关于 MySQL 写缓存(Change Buffer),我们先来看看 InnoDB 的技术架构图:
Change Buffer 是 Buffer Pool 中的一部分,虽然 Change Buffer 名字叫 Buffer ,但是它也是可以持久化的,在右边的 System Tablespace 中可以看到持久化 Change Buffer 的空间。触发写缓存(Change Buffer)持久化操作有以下几种情况:
- 1、数据库空闲时,后台有线程定时持久化
- 2、数据库缓冲池不够用时
- 3、数据库正常关闭时
- 4、redo log 写满时
再单独看看 Change Buffer 的架构图,如下所示: