首页/数据/Redis 进阶速查/自动重写触发条件
持久化56 条

自动重写触发条件

auto-aof-rewrite-percentage 与 auto-aof-rewrite-min-size 共同决定是否自动重写:AOF 体积相对上次重写后增长超过百分比,且总大小超过最小阈值时触发。

Redis 进阶速查数据更新于 2026-10-13

什么时候自动重写

AOF 是追加写入的日志,体积会随写入持续增长,需要定期重写来压缩。是否自动重写由两个参数共同决定:auto-aof-rewrite-percentage 表示当前 AOF 相对「上次重写后的大小」增长了多少百分比,auto-aof-rewrite-min-size 表示 AOF 至少要达到多大才值得重写。两个条件必须同时满足才会触发,这样小实例不会因为百分比早就被满足而频繁重写,大实例也不会因为绝对体积大就一直重写。

基本信息

增长阈值auto-aof-rewrite-percentage,默认 100 即翻倍
体积下限auto-aof-rewrite-min-size,默认 64mb
触发条件两个条件同时满足
与 RDB 关系RDB 的 save 规则不会触发 AOF 重写
观测项aof_current_size / aof_base_size / aof_rewrite_in_progress

典型使用场景

  • 写入量大的实例评估重写频率,避免 fork 过于密集
  • 磁盘紧张时临时放宽条件,把重写推迟到业务低峰
  • 排查 AOF 体积暴涨:确认重写是否被条件卡住始终触发不了
  • 升级或迁移前手动 BGREWRITEAOF,先把基线体积压下来
  • 容量规划:按日均写入量与增长率估算重写间隔与磁盘峰值

查看与调整

查看与调整
redis-cli CONFIG GET auto-aof-rewrite-percentage           # 当前增长阈值
redis-cli CONFIG GET auto-aof-rewrite-min-size             # 当前体积下限
redis-cli INFO persistence | grep -E 'aof_(current_size|base_size|rewrite_in_progress)'
redis-cli BGREWRITEAOF                                     # 手动触发一次重写
redis-cli CONFIG SET auto-aof-rewrite-percentage 200       # 调大阈值,降低重写频率
redis-cli CONFIG REWRITE                                   # 调整确认后落盘

观测项读法

指标含义正常与异常
aof_current_size当前 AOF 总体积与 base_size 的比值接近阈值说明即将重写
aof_base_size上次重写后的大小长期不更新说明重写从未触发
aof_rewrite_in_progress是否正在重写长期为 1 说明重写卡住或耗时异常
aof_pending_rewrite是否有排队中的重写为 1 说明上一次重写没能立即执行
百分比是相对上次重写后的体积,而不是相对某个绝对上限;刚完成一次重写后需要先增长到阈值倍数才会再次触发。写入速率高的实例增长很快,重写间隔被压缩,需要结合磁盘与负载一起评估。

易错点

  • 只调百分比不管最小体积,小实例在低写入场景下也会反复触发重写
  • 重写条件只看体积不看当前负载,重写与业务高峰撞车时延迟尖刺非常明显
  • 忽略磁盘余量:重写期间新旧文件同时存在,空间不足会让重写直接失败
  • 只看百分比数值就断定重写频率,不核对 aof_base_size 是否真的在更新

数据来源与参考

  • Redis 官方文档:redis.conf auto-aof-rewrite 注释
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌