change buffer是一个特殊的数据结构,当二级索引的页面不在缓冲池中,change buffer会缓存对二级索引的数据操作(update、insert、delete)。主要是减少磁盘的随机I/O.(仅支持二级索引,不支持聚集索引、全文索引、空间索引)
下面几种情况会导致purge(清除)change buffer的操作
- 用户线程选择二级索引进行数据查询,这时候必须要读入二级索引页,相应的ibuf entry需要merge到Page中。之后该page会被刷新到磁盘
- 当系统空闲或者slow shutdown时,后台master线程发起merge
- change buffer 页面没有空间了。
change buffer默认占有buffer pool内存的25%,最大为50%。
对于唯一二级索引(unique key),由于索引记录具有唯一性,因此无法缓存插入操作,但可以缓存删除操作;
如果索引包含降序索引列或主键包含降序索引列,则辅助索引不支持change buffer()
change buffer可以单独配置对某些操作进行缓存,操作包含:all、none、inserts、deletes、changes、purges(后台物理删除的操作)
参考:https://dev.mysql.com/doc/refman/5.7/en/innodb-change-buffer.html
网友评论