大家好,我是 青峯!😉
今天分享的内容是mysql 内存结构中的 Change Buffer 。
欢迎关注,持续更新中...
mysql 官方文档 :https://dev.mysql.com/doc/refman/8.0/en/innodb-change-buffer.html
进入主题,带着以下问题逐一揭开 Change Buffer 的面纱😉:
📌Change Buffer 概念与作用?
📌Change Buffer 有什么特点?
💡 Change Buffer 概念与作用?🔽
正常进行增删改操作,先从磁盘读取数据到内存,修改内存后再刷新到磁盘,需要两次磁盘IO,面对频繁大量这些操作,按照此方式就限制了性能。为了提高修改操作的性能,InnoDB存储引擎引入 Change Buffer 写缓冲。Change Buffer 位于 Buffer Pool 中。
现在修改数据先从 buffer pool 寻找目标,找到就直接修改,如果找不到就先把增删改后的数据缓存到Change Buffer 中,待后面访问Change Buffer时,再从磁盘加载修改前的数据到Buffer Pool,把Change Buffer 页数据与Buffer Pool对应页数据合并完成修改操作。
💡 Change Buffer 有什么特点?🔽
只能缓存二级非唯一索引页,不适用唯一索引页。修改唯一索引数据时,都需要从磁盘找出数据判断重复,而Change Buffer是为了减少访问磁盘次数而出现,这就发生冲突,所以对于唯一索引就没必要使用Change Buffer了。
- innodb_change_buffer_max_size:默认值25%,配置写缓存区占缓存区的比例,最大占50%
- innodb_change_buffering:默认值all,配置哪些操作需要使用写缓存区 all | none | inserts | deletes | changes | purges