MySQL写缓冲Change Buffer原理解读

本文详细介绍了MySQLInnoDB的ChangeBuffer机制,包括其如何优化写操作、结构、工作流程以及适用场景。ChangeBuffer主要用于存储对非唯一索引的修改操作,以减少磁盘I/O,提升数据库性能。

什么是Change Buffer

我们知道MySQL在查询的时候有一种预读机制, 为了提高同样数据的查询效率,会将磁盘中的数据加载到内存中,Buffer Pool(缓冲池)就承担了这么一个角色。

如果每次写操作,数据库都直接更新磁盘中的数据,会很占磁盘IO,那么MySQL是怎么优化的呢?

当用户执行SQL对非唯一索引进行更改时,如果索引对应的数据页不在缓存中时,InnoDB不会直接加载磁盘数据到缓存数据页中,而是缓存对这些更改操作(buffer changes)。

缓存区的更改操作会在磁盘数据被其它读操作加载到缓存中时合并(Merge)到对应的缓存数据页中。

InnoDB在Buffer Pool中开辟了一块内存,用来存储变更记录,用来缓存写操作到内存,就是Change Buffer。

MySQL使用它的目的是降低写操作的磁盘IO,提升数据库性能。

OK,Change Buffer基本概念了解了,继续往下读!

Change Buffer结构

我把InnoDB和Change Buffer的结构整合了一下,让我们更清楚 Change Buffer的位置。

从图中右侧信息可以做一些小总结:

  1. ChangeBuffer用于存储SQL变更操作;
  2. ChangeBuffer中的每个变更操作都有其对应的数据页,并且该数据页未加载到缓存中;
  3. 当ChangeBuffer中变更操作对应的数据页加载到缓存中后,InnoDB会把变更操作Merge到数据页上;
  4. InnoDB会定期加载Change Buffer中操作对应的数据页到缓存中,并Merge变更操作
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值