Mysql – InnoDB – 关于change buffer

时间:2021-7-5 作者:qvyue

一、change buffer是什么?

change buffer是一种特殊的数据结构,当二级索引页不在buffer pool中时,它将更改缓存到二级索引页。缓冲的更改(可能由INSERTUPDATEDELETE操作(DML)引起)稍后在其他读操作将页面加载到缓冲池时合并。

二、change buffer工作过程?

官网介绍图:

Mysql - InnoDB - 关于change buffer
image.png

聚簇索引不同的是,二级索引通常不是惟一的,并且二级索引的插入是以相对随机的顺序进行的。类似地,删除和更新可能会影响索引树中没有邻接位置的二级索引页。稍后,当其他操作将受影响的页读到缓冲池中时,合并缓存的更改,可以避免从磁盘将次要索引页读到缓冲池中所需的大量随机访问I/O。

purge操作会在系统大部分空闲或缓慢关闭期间定期将更新后的索引页写入磁盘。与立即将每个值写入磁盘相比,purge操作可以更有效地将一系列索引值写入磁盘块。

当有许多受影响的行和许多次要索引需要更新时,change buffer合并可能需要几个小时。在此期间,磁盘I/O会增加,这可能导致磁盘绑定查询的显著减速。在事务提交后,甚至在服务器关闭和重启后,更改缓冲区合并也可能继续发生(更多信息请参见15.21.2节“强制InnoDB恢复”)。

在内存中,change bufferbuffer pool的一部分。在磁盘上,change buffer系统表空间的一部分,当数据库服务器关闭时,将在其中缓冲索引更改。

change buffer中缓存的数据类型由innodb_change_buffering变量控制。有关更多信息,请参见配置更改缓冲。您还可以配置最大更改缓冲区大小。有关更多信息,请参见配置更改缓冲区最大大小。

如果次要索引包含降序索引列,或者主键包含降序索引列,则不支持更改缓冲。

关于变更缓冲区的常见问题,请参见A.16节“MySQL 8.0 FAQ: InnoDB变更缓冲区”

更多详细信息请参考change buffer官网介绍地址

未完待续......

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。