首页/数据/数据库速查/InnoDB 刷盘方式(innodb_flush_method)
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条
性能与调优57 条
Redis 命令96 条Redis 运维与场景124 条

InnoDB 刷盘方式(innodb_flush_method)

决定数据文件读写是否绕过 OS page cache:Linux 常见 fsync(默认)与 O_DIRECT;O_DIRECT 减少双重缓存,但不同存储上表现差异大。

数据库速查数据更新于 2026-10-12
典型值fsync / O_DIRECT / O_DIRECT_NO_FSYNC(Linux)
默认8.0 Linux 默认 fsync
选择大内存且数据文件读多可试 O_DIRECT,必须压测

查看

查看
SHOW VARIABLES LIKE 'innodb_flush_method';
-- 配置文件:innodb_flush_method = O_DIRECT

对比验证

对比验证
# 用 fio 观察同样负载下两种模式的 IO 行为差异
fio --name=randread --rw=randread --bs=16k --iodepth=64 --size=4G --filename=/data/testfile --runtime=60 --time_based
O_DIRECT 跳过 OS 缓存,双缓存消失后内存利用率更高;但小文件/日志混合负载下可能更慢,没有万能答案。

易错点

  • 照搬云厂商模板改 O_DIRECT 后 IO 抖动更严重:云盘对直接 IO 的实现差异大
  • 忘记 O_DIRECT 下 redo/undolog 的刷盘仍走各自逻辑,改一个参数不等于整体加速

数据来源与参考

  • MySQL 8.0 Reference Manual: innodb_flush_method

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌