什么是Change Buffer
我们知道MySQL在查询的时候有一种预读机制, 为了提高同样数据的查询效率,会将磁盘中的数据加载到内存中,Buffer Pool(缓冲池)就承担了这么一个角色。
如果每次写操作,数据库都直接更新磁盘中的数据,会很占磁盘IO,那么MySQL是怎么优化的呢?
当用户执行SQL对非唯一索引进行更改时,如果索引对应的数据页不在缓存中时,InnoDB不会直接加载磁盘数据到缓存数据页中,而是缓存对这些更改操作(buffer changes)。
缓存区的更改操作会在磁盘数据被其它读操作加载到缓存中时合并(Merge)到对应的缓存数据页中。
InnoDB在Buffer Pool中开辟了一块内存,用来存储变更记录,用来缓存写操作到内存,就是Change Buffer。
MySQL使用它的目的是降低写操作的磁盘IO,提升数据库性能。
OK,Change Buffer基本概念了解了,继续往下读!
Change Buffer结构
我把InnoDB和Change Buffer的结构整合了一下,让我们更清楚 Change Buffer的位置。
从图中右侧信息可以做一些小总结:
- ChangeBuffer用于存储SQL变更操作;
- Ch