14.2.5.5 Change Buffer
change buffer是一个指定的数据结构 用于caches 数据到secondary index pages
当影响的pages 不是在buffer pool里。buffered 改变了, 可以由于 INSERT, UPDATE, or DELETE操作(DML)
会随后合并 当pages 被加载到buffer pool通过其他的读操作。
和clustered indexes不同,secondary indexes通常是非唯一的, 插入到 secondary indexes
发生在一个相对随机的顺序。类似的,删除和更新可能影响secondary index pages
位于index tree不相邻的。 合并cached changes 在一个稍后的时间, 当影响的页面被读入到buffer pool
通过其他操作,避免了大量的随机访问I/O
周期性的, purge 操作 当系统是很空闲的时候运行,或者在一个slow shutdown 期间,
把更新的index pages 写入到磁盘。 purge 操作可以写disk blocks 对于一系列的index value 更加有效的
相比如果每个值被立即写入到磁盘。
change buffer 合并可能花费数个小时 当有很多的secondary indexes 需要更新,影响很多的行。
在这个时间点, disk/io会增加,可能会导致一个显著的下降对于磁盘查询。
Change buffer 合并可能也继续发生在一个事务被提交之后,事实上,
change buffer 合并可能继续发生在一个服务器shutdown 和重启
在内存里, change buffer占据了 InnoDB buffer pool的一部分,在磁盘上,
change buffer 是system tablespace的一部分, 因此index changes 保留的buffer 在数据库重启启动
数据cached 的类型在change buffer 是管理通过innodb_change_buffering 配置选项。
Monitoring the Change Buffer 监控Change Buffer:
下面的选项是可用的对于change buffer 监控:
InnoDB 标准监视器输出包含change buffer 的状态信息,查看监控数据,执行SHOW ENGINE INNODB STATUS 命令:
mysql> SHOW ENGINE INNODB STATUS\G
Change buffer 状态信息是在INSERT BUFFER AND ADAPTIVE HASH INDEX标题下,出现类似如下: