介绍MySQL Buffer pool里的change buffer
4 change buffer 4.1 基本概念 change buffer是一种特殊的数据结构,当这些页面不在缓冲池中时,这些高速缓存会将更改缓存到辅助索引页面。可能由INSERT,UPDATE或DELETE操作(DML)导致的缓冲更
<img src="https://img.mryunwei.com/uploads/2023/04/20230419065314788.jpg"><p>4 change buffer</p>
4.1 基本概念
change buffer是一种特殊的数据结构,当这些页面不在缓冲池中时,这些高速缓存会将更改缓存到辅助索引页面。可能由INSERT,UPDATE或DELETE操作(DML)导致的缓冲更改将在以后通过其他的读取操作将页加载到缓冲池中时合并。
推荐:mysql视频教程
如上图可见,change buffer用的是buffer pool里的内存,所以不能无限增长。change buffer大小可通过参数innodb_change_buffer_max_size动态设置。 比如设置为50:change buffer的大小最多只能占用buffer pool的50%。
需更新一个数据页时:
change buffer 实际上也是可持久化的数据,即它不仅在内存中有拷贝,也会被写进磁盘。
4.2 merge
将change buffer中的操作应用到原数据页,得到最新结果的过程。
4.2.1 触发时机
4.3 何时使用change buffer
难道普通索引的所有场景,使用change buffer都可加速吗?
注意merge才是真正进行数据更新时刻,change buffer主要是将记录的变更动作缓存。所以在一个数据页做merge前,change buffer记录变更越多(即该数据页上要更新的次数越多),收益越大。