← 中文资源

简体中文版本

基准测试 MySQL InnoDB 刷盘设置

在不同 innodb_flush_log_at_trx_commit 级别下测量写入吞吐,选择满足持久性目标且最安全的配置。

阅读英文原文

目标

写密集型负载受 fsync 限制,团队希望在放松持久性前先拿到证据。本配方在可丢弃的预发实例上,先以最严格刷盘设置跑基准,记录吞吐与 fsync 次数作为持久性基线,再以放松设置重跑并对比,量化持久性的代价,最后选择既满足吞吐目标又符合既定丢失窗口的配置。

步骤要点

  1. 以最严格刷盘设置跑基准,记录吞吐与 fsync。
  2. 以放松设置重跑同一基准并对比差异。
  3. 预热缓冲池并多次运行,丢弃首轮以降低噪声。
  4. 把选定值写入配置文件并持久化。
SET GLOBAL innodb_flush_log_at_trx_commit = 1;
-- run the write benchmark
SHOW GLOBAL STATUS LIKE 'Innodb_data_fsyncs';

排错提示

  • 放松刷盘可能在崩溃时丢失近期事务。
  • 基准硬件与生产不同,结论需谨慎。
  • 运行时设置重启会丢失,需写入配置。

适用边界

  • 不覆盖复制链路的持久性。
  • 需要界定可接受的丢失窗口。