change buffer

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

你可能感兴趣的:(change buffer)