首页/数据/数据库速查/Redo Log 容量配置(8.0.30+ innodb_redo_log_capacity)
性能与调优57 条

Redo Log 容量配置(8.0.30+ innodb_redo_log_capacity)

redo 是崩溃恢复与写入吞吐的关键:8.0.30 起用 innodb_redo_log_capacity 统一管理(默认 100M 偏小),旧版本用 log_file_size x files_in_group。

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

Redo Log 容量是什么

Redo Log 是 InnoDB 的循环写入日志,事务提交先写它再异步刷脏页,因此容量直接决定崩溃恢复时间与写入吞吐。MySQL 8.0.30 起由 innodb_redo_log_capacity 一个参数统一管理,默认 100M;旧版本用 innodb_log_file_size 乘 innodb_log_files_in_group 组合。容量偏小会频繁触发 checkpoint,刷脏页压力上升,写入被拖慢。

基本信息

适用版本innodb_redo_log_capacity 需 8.0.30 及以上
旧参数innodb_log_file_size / innodb_log_files_in_group,8.0.30 起废弃
默认值100M,对写密集实例偏小
文件位置8.0.30+ 位于 datadir 下的 #innodb_redo 目录
建议取值写密集库 1G 到 4G 起步,再按 checkpoint 压力调整

典型使用场景

  • 写密集实例调优:把 redo 容量调大,减少 checkpoint 频率提升吞吐
  • 大事务或批量导入前评估:单个大事务可能撑满 redo,导致日志覆盖等待
  • 监控 checkpoint 压力:看 Log sequence number 与 Last checkpoint 的差距
  • 容量规划:redo 文件常驻磁盘,扩容前确认磁盘余量
  • 版本升级核对:升到 8.0.30 后旧参数被取代,配置要跟着改
  • 崩溃恢复评估:redo 越大重启恢复时间越长,需要与业务容忍度权衡

查看与调整

查看与调整
SHOW VARIABLES LIKE 'innodb_redo_log_capacity';           # 8.0.30+ 的唯一入口
SET GLOBAL innodb_redo_log_capacity = 4294967296;         # 调到 4G
SHOW VARIABLES LIKE 'innodb_log_file%';                   # 旧参数,8.0.30 起已废弃
SHOW ENGINE INNODB STATUS\G                                # 看 LOG 段的 LSN 与 checkpoint 差值
SELECT @@innodb_redo_log_capacity/1024/1024 AS mb;         # 换算成 MB 便于记录
-- 落地到配置文件(重启后仍生效)
-- [mysqld]\n-- innodb_redo_log_capacity = 4G

相关参数读法

参数含义调整影响
innodb_redo_log_capacityredo 总容量,8.0.30+ 生效调大减少 checkpoint 频率,恢复时间变长
innodb_log_file_size旧版单文件大小,已废弃8.0.30+ 配置它不再产生预期效果
innodb_log_files_in_group旧版文件个数,已废弃与上一条成对出现,需同步核对
innodb_flush_log_at_trx_commitredo 刷盘时机,1 为每次提交与容量无关,但共同决定持久化级别
8.0.30 之前修改 innodb_log_file_size 必须干净关闭实例并删除旧 ib_logfile 文件,操作不当会导致实例起不来;升级到 8.0.30 以后不要再动旧参数。
8.0.30+ 的 redo 由 32 个文件组成并动态调整,不需要人工删除文件即可在线扩容;旧文档里的删文件步骤在新版本反而会带来风险。
redo 容量与 innodb_flush_log_at_trx_commit 是两件事:前者决定能攒多少日志、checkpoint 频率与崩溃恢复时间,后者决定每次提交是否刷盘;调优前先分清瓶颈在提交延迟还是 checkpoint 压力。

易错点

  • 继续按旧文档改 innodb_log_file_size,8.0.30+ 上配置不生效却以为已调优
  • redo 容量过大把磁盘写满,反而导致实例无法写入
  • 只调容量不看 checkpoint 压力,吞吐瓶颈其实在 innodb_io_capacity 或磁盘本身
  • 单个大事务超过 redo 容量,出现日志覆盖等待导致写入卡顿,应拆分事务
  • 在线扩容时误删 #innodb_redo 下的文件,破坏实例启动所需的日志结构

数据来源与参考

  • MySQL 8.0 Reference Manual: Redo Log
  • MySQL 8.0.30 Release Notes: innodb_redo_log_capacity

相关工具

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