网易首页 > 网易号 > 正文 申请入驻

MySQL写缓冲(change buffer),终于懂了!!!(收藏)

0
分享至

作者:58沈剑

毫无疑问,对于读请求,缓冲池能够减少磁盘IO,提升性能。问题来了,那写请求呢?

简单回顾一下InnoDB缓冲池的工作原理:

  • MySQL数据存储包含内存与磁盘两个部分;
  • 内存缓冲池(buffer pool)以页为单位,缓存最热的数据页(data page)与索引页(index page);
  • InnoDB以变种LRU算法管理缓冲池,并能够解决“预读失效”与“缓冲池污染”的问题;

毫无疑问,对于读请求,缓冲池能够减少磁盘IO,提升性能。问题来了,那写请求呢?

情况一

假如要修改页号为4的索引页,而这个页正好在缓冲池内。

如上图序号1-2:

  • 直接修改缓冲池中的页,一次内存操作;
  • 写入redo log,一次磁盘顺序写操作;

这样的效率是最高的。

画外音:像写日志这种顺序写,每秒几万次没问题。

是否会出现一致性问题呢?

并不会。

  • 读取,会命中缓冲池的页;
  • 缓冲池LRU数据淘汰,会将“脏页”刷回磁盘;
  • 数据库异常奔溃,能够从redo log中恢复数据;

什么时候缓冲池中的页,会刷到磁盘上呢?

定期刷磁盘,而不是每次刷磁盘,能够降低磁盘IO,提升MySQL的性能。

画外音:批量写,是常见的优化手段。

情况二

假如要修改页号为40的索引页,而这个页正好不在缓冲池内。

此时麻烦一点,如上图需要1-3:

  • 先把需要为40的索引页,从磁盘加载到缓冲池,一次磁盘随机读操作;
  • 修改缓冲池中的页,一次内存操作;
  • 写入redo log,一次磁盘顺序写操作;

没有命中缓冲池的时候,至少产生一次磁盘IO,对于写多读少的业务场景,是否还有优化的空间呢?

这即是InnoDB考虑的问题,又是本文将要讨论的写缓冲(change buffer)。

画外音:从名字容易看出,写缓冲是降低磁盘IO,提升数据库写性能的一种机制。

什么是InnoDB的写缓冲?

在MySQL5.5之前,叫插入缓冲(insert buffer),只针对insert做了优化;现在对delete和update也有效,叫做写缓冲(change buffer)。

它是一种应用在非唯一普通索引页(non-unique secondary index page)不在缓冲池中,对页进行了写操作,并不会立刻将磁盘页加载到缓冲池,而仅仅记录缓冲变更(buffer changes),等未来数据被读取时,再将数据合并(merge)恢复到缓冲池中的技术。写缓冲的目的是降低写操作的磁盘IO,提升数据库性能。

画外音:R了狗了,这个句子,好长。

InnoDB加入写缓冲优化,上文“情况二”流程会有什么变化?

假如要修改页号为40的索引页,而这个页正好不在缓冲池内。

加入写缓冲优化后,流程优化为:

  • 在写缓冲中记录这个操作,一次内存操作;
  • 写入redo log,一次磁盘顺序写操作;

其性能与,这个索引页在缓冲池中,相近。

画外音:可以看到,40这一页,并没有加载到缓冲池中。

是否会出现一致性问题呢?

也不会。

  • 数据库异常奔溃,能够从redo log中恢复数据;
  • 写缓冲不只是一个内存结构,它也会被定期刷盘到写缓冲系统表空间;
  • 数据读取时,有另外的流程,将数据合并到缓冲池;

不妨设,稍后的一个时间,有请求查询索引页40的数据。

此时的流程如序号1-3:

  • 载入索引页,缓冲池未命中,这次磁盘IO不可避免;
  • 从写缓冲读取相关信息;
  • 恢复索引页,放到缓冲池LRU里;

画外音:可以看到,40这一页,在真正被读取时,才会被加载到缓冲池中。

还有一个遗漏问题,为什么写缓冲优化,仅适用于非唯一普通索引页呢?

InnoDB里,聚集索引(clustered index)和普通索引(secondary index)的异同,《
1分钟了解MyISAM与InnoDB的索引差异
》有详尽的叙述,不再展开。

如果索引设置了唯一(unique)属性,在进行修改操作时,InnoDB必须进行唯一性检查。也就是说,索引页即使不在缓冲池,磁盘上的页读取无法避免(否则怎么校验是否唯一?),此时就应该直接把相应的页放入缓冲池再进行修改,而不应该再整写缓冲这个幺蛾子。

除了数据页被访问,还有哪些场景会触发刷写缓冲中的数据呢?

还有这么几种情况,会刷写缓冲中的数据:

  • 有一个后台线程,会认为数据库空闲时;
  • 数据库缓冲池不够用时;
  • 数据库正常关闭时;
  • redo log写满时;

画外音:几乎不会出现redo log写满,此时整个数据库处于无法写入的不可用状态。

什么业务场景,适合开启InnoDB的写缓冲机制?

先说什么时候不适合,如上文分析,当:

  • 数据库都是唯一索引;
  • 或者,写入一个数据后,会立刻读取它;

这两类场景,在写操作进行时(进行后),本来就要进行进行页读取,本来相应页面就要入缓冲池,此时写缓存反倒成了负担,增加了复杂度。

什么时候适合使用写缓冲,如果:

  • 数据库大部分是非唯一索引;
  • 业务是写多读少,或者不是写后立刻读取;

可以使用写缓冲,将原本每次写入都需要进行磁盘IO的SQL,优化定期批量写磁盘。

画外音:例如,账单流水业务。

上述原理,对应InnoDB里哪些参数?

有两个比较重要的参数。

(1) 参数:innodb_change_buffer_max_size

介绍:配置写缓冲的大小,占整个缓冲池的比例,默认值是25%,最大值是50%。

画外音:写多读少的业务,才需要调大这个值,读多写少的业务,25%其实也多了。

(2) 参数:innodb_change_buffering

介绍:配置哪些写操作启用写缓冲,可以设置成all/none/inserts/deletes等。

希望大家有收获,思路比结论重要。

责任编辑:赵宁宁来源: 架构师之路

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
离谱!匈牙利留学生大闹张家界网暴员工,景区不分对错道歉、退费、给特权

离谱!匈牙利留学生大闹张家界网暴员工,景区不分对错道歉、退费、给特权

小徐讲八卦
2026-08-17 07:12:04
吃相难看!马雷斯卡拿到offer立马告诉朋友 瓜帅被迫提前宣布离任

吃相难看!马雷斯卡拿到offer立马告诉朋友 瓜帅被迫提前宣布离任

雪狼侃体育
2026-08-17 15:37:36
比亚迪王炸新车来了,630km续航,9.99万元起

比亚迪王炸新车来了,630km续航,9.99万元起

科技头版Pro
2026-08-17 14:47:06
李谷一不再隐瞒!揭露宋祖英走上高位的真相,难怪她丁克多年

李谷一不再隐瞒!揭露宋祖英走上高位的真相,难怪她丁克多年

遁走的两轮
2026-07-08 22:06:29
太可惜!1000球成绝唱!41岁C罗深夜宣布重大决定:这一年很可能是终点,我想留下辉煌的成就!球迷意难平

太可惜!1000球成绝唱!41岁C罗深夜宣布重大决定:这一年很可能是终点,我想留下辉煌的成就!球迷意难平

锐评利物浦
2026-08-17 19:37:53
连续32年未进行捕捞,三峡水库中的鱼,最大的已经长到多大了?

连续32年未进行捕捞,三峡水库中的鱼,最大的已经长到多大了?

抽象派大师
2026-08-14 16:40:49
松岛辉空完全不给张本面子?输球后扭头就走 7天内连输日乒一哥之争

松岛辉空完全不给张本面子?输球后扭头就走 7天内连输日乒一哥之争

颜小白的篮球梦
2026-08-17 17:35:57
无耻!曝一印度大V用孟买达拉维贫民窟照片冒充北京,在外网收获数千点赞

无耻!曝一印度大V用孟买达拉维贫民窟照片冒充北京,在外网收获数千点赞

小徐讲八卦
2026-08-17 15:39:08
《欢迎来龙餐馆》“美军坦克”产自江苏,道具方:以前靠进口,现在纯国产

《欢迎来龙餐馆》“美军坦克”产自江苏,道具方:以前靠进口,现在纯国产

第一财经资讯
2026-08-17 21:54:14
就郭德纲一案,武汉文旅已成骑虎难下之势

就郭德纲一案,武汉文旅已成骑虎难下之势

情感大头说说
2026-08-17 14:01:39
中国人到底在想什么?烂到天际的中国动画爆火,惊动了美国媒体!

中国人到底在想什么?烂到天际的中国动画爆火,惊动了美国媒体!

王嚾晓
2026-08-17 20:52:12
某品牌 “又” 翻车了:宣称屏幕色域为100% sRGB,实测仅约60%

某品牌 “又” 翻车了:宣称屏幕色域为100% sRGB,实测仅约60%

宗熙先生
2026-08-16 10:27:43
蔡崇信称尼克斯夺冠令篮网尴尬

蔡崇信称尼克斯夺冠令篮网尴尬

体坛周报
2026-08-18 02:46:08
开学通知太突然!2026中小学秋季开学时间已确定,千万别错过

开学通知太突然!2026中小学秋季开学时间已确定,千万别错过

户外阿毽
2026-08-18 03:20:33
2026年最失败的4所985高校,录取分数线暴跌,实属罕见!

2026年最失败的4所985高校,录取分数线暴跌,实属罕见!

教育导向分享
2026-08-17 21:39:02
巴萨上皇马当了!总价7600万欧敲定罗德里,没钱买巨星级前锋了

巴萨上皇马当了!总价7600万欧敲定罗德里,没钱买巨星级前锋了

体育知多少
2026-08-17 08:23:07
家里老人走了才知道,退休金3000元,能领的抚恤金有这么多

家里老人走了才知道,退休金3000元,能领的抚恤金有这么多

小陆搞笑日常
2026-08-17 17:19:50
“化痰高手”就是它!连喝三天,肺里垃圾全清空,比梨汤管用太多了

“化痰高手”就是它!连喝三天,肺里垃圾全清空,比梨汤管用太多了

江江食研社
2026-08-17 09:14:50
郝蕾首度公开自己患重度抑郁经历:我不会原谅伤害我的人

郝蕾首度公开自己患重度抑郁经历:我不会原谅伤害我的人

观星赏月
2026-08-17 03:23:48
派出所回应男子办理失业保险“被死亡”一事:因“双重户口”导致,正积极处理

派出所回应男子办理失业保险“被死亡”一事:因“双重户口”导致,正积极处理

封面新闻
2026-08-17 19:38:07
2026-08-18 07:35:00
Nodejs开发
Nodejs开发
分享只有程序员懂的干货
648文章数 823关注度
往期回顾 全部

科技要闻

马斯克600亿美元买条近路

头条要闻

因老板娘一句随口交代 打工走失男子独守深山老宅25年

头条要闻

因老板娘一句随口交代 打工走失男子独守深山老宅25年

体育要闻

C罗:可能是生涯最后一年 未来都规划好了

娱乐要闻

立案风波席卷德云社多场巡演叫停!

财经要闻

爱丽家居跨界玩存储:溢价背后藏着机密案

汽车要闻

2027款艾瑞泽8 PRO 年轻人的务实之选

态度原创

家居
亲子
艺术
房产
公开课

家居要闻

2026建博会(广州) 公装联探展交流活动

亲子要闻

严重过敏反应微博健康说 儿科医生黄剑峰

艺术要闻

杀妻入狱、发疯自残,潦倒到啃野草,却成后世顶流大师

房产要闻

商办划片入学!民水民电,购房补贴!海南又一城出台新政!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版