mysql change buffer是什么?
2 个回答
杯中之物从来不能消愁补过月关MySQL 的 **change buffer** 是一种用于优化磁盘 I/O 的机制,特别是在更新未加载到内存中的数据页时发挥作用。其主要工作原理是: 1. **延迟更新**:当更新某个索引页(例如插入或删除操作)时,如果该数据页不在内存中,InnoDB 会将这些操作暂存到 **change buffer** 中,而不是立即将数据页从磁盘读入内存并更新。 2. **合并操作**:当该数据页以后被访问时,InnoDB 会将数据页从磁盘加载到内存,然后执行 **change buffer** 中与该数据页相关的操作,确保数据的一致性和完整性。 ### 优点: - **减少磁盘 I/O**:通过延迟将数据页从磁盘读入内存,特别是在写多读少的场景中,减少了不必要的随机 I/O 操作。 - **提高性能**:写入操作可以更快完成,因为不需要立即加载未在内存中的数据页。 ### 限制: - **唯一索引无法使用 change buffer**:因为唯一索引要求每次更新时都要检查唯一性约束,所以无法使用 **change buffer**,只能直接操作内存或磁盘上的数据页。 - **普通索引可以使用 change buffer**:只有普通索引能够利用这一机制,确保在数据不需要立即读取时提高写入性能。 ### 适用场景: - **写多读少**:例如账单类、日志类系统,这些系统在写入大量数据后不会立即访问,适合使用 **change buffer** 进行延迟更新。 - **写后立即读场景不适合**:如果写入后立即查询数据,`change buffer` 的效果会减弱,甚至增加合并的开销和 I/O 次数。发布于 2022-06-21 11:20 •IP属地 天津举报评论收藏
入体冰凉的月光,都比不上你绝情的目光。松林(change buffer就是将更新数据页的操作缓存下来) 在更新数据时,如果数据行所在的数据页在内存中,直接更新内存中的数据页。 如果不在内存中,为了减少磁盘IO的次数,innodb会将这些更新操作缓存在change buffer中,在下一次查询时需要访问这个数据页时,在执行change buffer中的操作对数据页进行更新。(或者是在MySQL Server空闲时,会将change buffer中所有操作更新到磁盘,也就是俗称的‘刷页’。) 适合写多读少的场景,因为这样即便立即写了,也不太可能会被访问到,延迟更新可以减少磁盘I/O,只有普通索引会用到,因为唯一性索引,在更新时就需要判断唯一性,所以没有必要。发布于 2022-02-12 05:21 •IP属地 云南举报评论收藏
公众号进入网站体验更佳

