首页/数据/数据库速查/事务刷盘安全级(innodb_flush_log_at_trx_commit)
性能与调优57 条

事务刷盘安全级(innodb_flush_log_at_trx_commit)

0/1/2 三档决定每次提交时 redo 的刷盘行为:1 最安全(默认,每次提交 fsync),0/2 快但可能丢最近 1 秒的事务。

数据库速查数据更新于 2026-10-12

取值

取值行为丢失窗口
0每秒写+刷盘,提交不刷实例崩溃丢 1s
1每次提交写并 fsync(默认)不丢已提交事务
2每次提交写入 OS cache,每秒 fsyncOS 崩溃丢 1s

查看与调整

查看与调整
SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';
SET GLOBAL innodb_flush_log_at_trx_commit = 2;  -- 仅限能容忍丢1秒的库
从 1 降到 2 属于可用性换性能的取舍:支付、账务类库保持 1;压测环境可临时调低。

易错点

  • 线上看到提交延迟高就把它改成 2:丢数据的锅往往在事后才被清算
  • 以为 =0 完全不落盘:0 仍每秒刷,但实例崩溃丢 1 秒事务

数据来源与参考

  • MySQL 8.0 Reference Manual: innodb_flush_log_at_trx_commit

相关工具

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