一、Change Buffer架构图
二、什么是ChageBuffer
change buffer是一种特殊的数据结构,用来缓存被修改的二级索引,稍后当其他读操作将页面加载到缓冲池时,这些更改将被合并。
change buffer是缓冲区中的一部分,与聚集索引不同,二级索引通常是非惟一的,插入二级索引的顺序相对随机。类似地,删除和更新可能会影响不在索引树中相邻位置的二级索引页。稍后,当其他操作将受影响的页读入缓冲池时,合并缓存的更改,可以避免从磁盘将辅助索引页读入缓冲池所需的大量随机I/O访问。
三、change buffer 作用
当在表上执行INSERT、UPDATE和DELETE操作时,索引列的值(尤其是二级索引的值)通常是无序的,需要大量的I/O来更新二级索引。当相关页不在缓冲池中时,changebuffer缓存将要更改的为二级索引条目,从而通过不立即从磁盘读取页来避免昂贵的I/O操作。在将页面加载到缓冲池时合并已缓冲的更改,更新后的页面稍后刷新到磁盘。InnoDB主线程会在服务器几乎空闲或者慢关机的时候合并缓存的更改。