MySQL-change-buffer

在这里插入图片描述
关于MySQL中的change_buffer
MySQL中通过MVCC+锁解决了的并发场景,而的并发就由change_buffer来解决,其实也就是我们常说的写缓冲

原理:

DML操作⼆级索引,判断数据⻚是否在buffer pool中,不在则到change_buffer中操作,然后以⼀定频率对数据和辅助索引数据⻚进⾏merge。

主要作用:

多次操作合并为一次,减少IO,提升DML性能

特性:

  • 特殊的缓存结构,⽤于缓存不在buffer pool⾥⾯的⼆级索引
  • ⽀持inser,update,delete(DML)
  • ⼆级索引被读取到buffer pool时候:执⾏select语句检查是否在change_buffer,在则merge到索引⻚
  • 后台主线程定期merge并刷盘

总结

简单来说,大家可以想象一下如果没有change_buffer会怎么样
所有的DML(除insert)都会先从磁盘读取数据页加载到内存,修改后又刷盘
但是有change_buffer,只需要修改或插入数据,之后统一合并落盘即可,大大减少IO。
例如一些写或更新多,查询少的场景下,我们可以增加innodb_change_buffer_max_size的大小以提升性能。

彩蛋

为什么change_buffer对主键索引或唯一索引无效
因为主键索引或唯一索引,需要判断数据是否唯一,需要先加载数据页判断。那么既然已经加载了就直接在buffer pool修改数据页刷回去就行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值