首页/数据/数据库速查/AOF 重写(BGREWRITEAOF 与自动重写阈值)
Redis 运维与场景124 条

AOF 重写(BGREWRITEAOF 与自动重写阈值)

AOF 会随写入不断膨胀,需要重写压缩:BGREWRITEAOF 手动触发;自动重写由百分比与最小体积双阈值控制。

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

AOF 重写是什么

AOF 会随着写入不断膨胀,需要重写来压缩:BGREWRITEAOF 手动触发,由后台子进程根据当前数据集生成一份最小的新 AOF;自动重写则由两个阈值共同控制——相对上次重写后的增长率与最小文件体积。重写期间会 fork 子进程,内存与磁盘 IO 都会上升,因此关注点应当是重写频率,而不只是重写是否成功。

基本信息

手动触发BGREWRITEAOF
自动触发auto-aof-rewrite-percentage 与 auto-aof-rewrite-min-size 同时满足
默认值增长比例 100,最小体积 64mb
观察方式INFO persistence 中的重写状态与基准体积
实现机制fork 子进程配合写时复制

典型使用场景

  • AOF 文件持续膨胀后手工压缩一次
  • 调整自动重写阈值,减少频繁重写
  • 重写期间出现延迟抖动时的排查
  • 备份之前确认 AOF 处于一致状态
  • 评估现有磁盘 IO 能否承受重写压力

操作与观察

操作与观察
BGREWRITEAOF                                  # 手动触发重写
INFO persistence | grep aof_rewrite_in_progress
INFO persistence | grep aof_base_size
INFO persistence | grep aof_pending_rewrite
INFO persistence | grep aof_last_bgrewrite_status
CONFIG GET auto-aof-rewrite-percentage
CONFIG GET auto-aof-rewrite-min-size

指标与参数读法

指标或参数含义判读方式
BGREWRITEAOF手动触发重写返回状态立刻可知
auto-aof-rewrite-percentage相对上次重写后的增长比例默认 100,即体积翻倍才触发
auto-aof-rewrite-min-size触发重写的最小体积默认 64mb,小实例尤其要看
aof_rewrite_in_progress是否正在重写长期为 1 说明盘慢或数据集过大
aof_base_size上次重写后的基准体积用于计算当前增长比例
重写同样走 fork 加写时复制:写入压力大时内存占用与磁盘 IO 会同时上升,如果观察到 aof_rewrite_in_progress 长时间为 1,就要怀疑磁盘性能跟不上。
重写期间做备份只拷贝增量文件是不安全的:此时基准文件尚未合并完成,拷出来的 AOF 集合并不一致,恢复时必然缺数据。
频繁自动重写会让吞吐出现周期性抖动:先检查增长率与最小体积这两个阈值是不是设得太小,再评估磁盘性能是否够用。如果每次重写都远超预期耗时,通常说明磁盘随机写能力不足,而不是参数没调好。

易错点

  • 只拷增量文件就当作完整备份:基准尚未合并,恢复必然缺数据
  • 阈值设得太小:重写过于频繁,吞吐出现周期性抖动
  • 只看重写是否成功、不看频率:磁盘 IO 被长期占用
  • 在业务高峰手工触发重写:fork 与 IO 压力直接叠加在用户请求上

数据来源与参考

  • Redis 官方文档: BGREWRITEAOF
  • Redis 官方文档: auto-aof-rewrite-percentage

相关工具

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