news 2026/7/14 13:11:17

InnoDB 脏页到底什么时候刷盘?一文彻底讲透 Flush List 与 Checkpoint 机制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
InnoDB 脏页到底什么时候刷盘?一文彻底讲透 Flush List 与 Checkpoint 机制

在上一篇文章中,我们已经搞清楚了一件事:

InnoDB 并不是“随便刷盘”,而是通过 Flush List 精准管理所有脏页。

但紧接着,一个更现实、也是 DBA 在生产中最关心的问题就来了:

❓ 这些 Flush List 里的脏页,到底什么时候刷盘?谁来刷?一次刷多少?

今天这篇文章,我们就继续深入 InnoDB 内核,把Flush List → 刷盘 → Checkpoint这条完整链路彻底讲清楚。


一、先说结论:刷盘不是“想刷就刷”

很多人对 MySQL 的理解还停留在:

“后台线程会慢慢把脏页刷回磁盘”

但在真实的生产环境中,如果刷盘策略设计不好,结果只有两个:

  • ❌ IO 打满,TPS 暴跌
  • ❌ 脏页堆积,崩溃恢复时间爆炸

所以 InnoDB 对刷盘这件事的核心目标只有一句话:

在不影响前台业务的前提下,尽可能均匀、可控地刷脏页。

而这正是Checkpoint 机制存在的意义


二、Flush List 中的脏页,并不会立刻刷盘

先明确一个重要事实:

缓存页一旦变脏,只是“有资格刷盘”,并不代表“马上刷盘”。

Flush List 的作用只是:

  • 记录:哪些页被修改过
  • 标记:这些页“迟早要写回磁盘”

是否刷、什么时候刷,由刷盘触发条件决定。


三、InnoDB 触发刷盘的 4 个核心时机(DBA 必须知道)

1️⃣ Buffer Pool 空间不足(最危险)

当数据库需要新的缓存页,但:

  • free list 里已经没有空闲页
  • LRU 淘汰出来的页,恰好是脏页

这时怎么办?

👉只能先刷盘,再复用缓存页

这类刷盘的特点是:

  • 非常被动
  • 容易造成 IO 突刺
  • TPS 会明显下降

📌DBA 提示
如果你在监控中看到:

  • Buffer Pool free pages 很少
  • IO 使用率突然升高

很可能就是这种情况。


2️⃣ 后台定期刷盘(最健康)

InnoDB 内部有专门的后台线程(page cleaner):

  • 周期性检查 Flush List
  • 按照算法刷一部分脏页
  • 目标是:“提前消化脏页”

这类刷盘的特点:

  • 平滑
  • 可预测
  • 对业务影响最小

这也是最理想的刷盘方式


3️⃣ Checkpoint 推进(核心机制)

这是最关键、也是 DBA 必须理解的部分。

什么是 Checkpoint?

简单说一句人话:

Checkpoint 表示:redo log 中,哪些修改已经安全落盘。

  • Checkpoint 之前的 redo log
    👉 对应的脏页必须已经刷盘
  • Checkpoint 之后的 redo log
    👉 允许还没刷盘

为什么 Checkpoint 一定会触发刷盘?

因为 redo log 是有限大小的。

当 redo log 快要写满时:

  • 如果 Checkpoint 不往前推进
  • redo log 就无法继续写
  • 前台事务会被阻塞

于是 InnoDB 只能:

👉强制刷一批 Flush List 中的脏页
👉推进 Checkpoint

这也是为什么:

redo log 太小,一定会导致性能问题


4️⃣ 数据库关闭或崩溃恢复

  • 正常 shutdown:
    → 尽量刷干净脏页
  • 崩溃恢复:
    → redo log 重放 + 脏页修复

这类场景我们不展开,DBA 更关注前 3 种。


四、Flush List + Checkpoint 的协同关系(重点)

可以用一句话概括它们的关系:

Flush List 管“刷谁”,Checkpoint 管“刷到哪一步算安全”。

换个更形象的比喻:

  • Flush List:
    👉 一份“待办刷盘任务清单”
  • Checkpoint:
    👉 一条“安全线”,线前的数据必须已落盘

InnoDB 的所有刷盘策略,本质上都是在:

控制 Flush List 的长度 + 控制 Checkpoint 推进速度


五、为什么“脏页太多”会拖垮数据库?

这是生产中非常经典的问题。

当 Flush List 过长时,会发生什么?

  1. Checkpoint 推进变慢
  2. redo log 空间被持续占用
  3. 最终触发强制刷盘
  4. IO 飙升,TPS 下降
  5. 延迟抖动,业务超时

你会看到:

  • 数据库 CPU 不高
  • SQL 本身也不慢
  • 但 TPS 就是上不去

📌根因往往是:刷盘失控


六、DBA 实战建议(非常重要)

✅ 1. Buffer Pool 要足够大

原则:

Buffer Pool 能兜住“业务高峰期的脏页量”

否则:

  • 脏页来不及刷
  • 被动刷盘频繁触发

✅ 2. redo log 不能太小

redo log 太小的直接后果是:

  • Checkpoint 频繁推进
  • 刷盘压力集中爆发

这是很多系统:

“低并发还行,一上并发就抖”的根本原因之一。


✅ 3. 重点关注这些指标

DBA 日常必须盯的:

  • Buffer Pool dirty pages
  • Flush List length
  • redo log 使用率
  • page cleaner 活跃度
  • 磁盘 IO latency

这些指标,比单纯看 QPS 有价值得多。


七、一句话 DBA 总结

Flush List 决定“哪些页需要刷”,Checkpoint 决定“刷到哪里才算安全”,两者共同决定了 MySQL 的性能上限与稳定性下限。

理解这一套机制,你就真正从:

  • “会用 MySQL”
  • 迈进了
    👉“懂 MySQL 内核的 DBA”

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/11 16:31:59

计算机硬件解剖:从拆解到性能优化

硬件解剖课技术文章大纲计算机硬件概述计算机硬件的基本组成硬件解剖的意义与目标常见硬件故障与维护需求主要硬件组件解析中央处理器(CPU)架构与工作原理性能参数(核心数、主频、缓存)散热解决方案(风冷、水冷&#x…

作者头像 李华
网站建设 2026/7/11 16:31:58

基于STM32单片机盲人导航 导盲杖 智能拐杖系统 超声波测距 老人防丢 防摔到 跌倒检测报警 物联网控制系统 DIY 成品套件 DIY设计 实物+源程序+原理图+仿真+其它资料

当今社会科技发展迅速,带给人们生活的便利也越来越多,从物联网到大数据,从互联网到人工智能,所有的一切都是为了让人们体会到更加便捷。然而这些技术中却很少有为盲人服务的。中国是世界盲人最多的国家之一,目前约有50…

作者头像 李华
网站建设 2026/7/13 8:52:35

AutoGPT联网搜索功能如何启用?详细配置说明来了

AutoGPT联网搜索功能如何启用?详细配置说明来了 在当今信息爆炸的时代,人工智能正从“被动应答”走向“主动思考”。我们不再满足于让AI回答“今天天气怎么样”,而是期待它能独立完成“帮我制定一份基于当前气候趋势的户外旅行计划”这样的复…

作者头像 李华
网站建设 2026/7/14 0:28:03

企业内部智能客服新选择:基于LobeChat的定制化解决方案

企业内部智能客服新选择:基于LobeChat的定制化解决方案 在当今企业数字化转型加速的背景下,员工对高效、即时响应的服务需求日益增长。然而,传统的客服模式——无论是人工坐席还是依赖公共云AI助手——正暴露出越来越多的问题:响应…

作者头像 李华
网站建设 2026/7/14 0:28:02

AutoGPT镜像用户增长数据曝光:三个月突破10万下载

AutoGPT镜像用户增长数据曝光:三个月突破10万下载 在生成式AI浪潮席卷全球的今天,一个开源项目悄然刷新了社区热度记录——AutoGPT 镜像上线仅三个月,下载量便突破10万次。这不仅是一组数字的增长,更折射出开发者对“自主智能体”…

作者头像 李华
网站建设 2026/7/14 0:28:01

Python 1级编程考试模拟题库(5套精选)

目录Python 1级编程考试模拟题库(5套精选)卷1:基础语法与运算一、单选题 (每题2分,共50分)二、判断题 (每题2分,共20分)三、编程题 (每题15分,共30分)卷2:控制流程 (If/Else)一、单选题 (每题2分…

作者头像 李华