slowlog-max-len 是什么
slowlog-max-len 控制慢日志在内存里保留多少条记录,默认 128 条,写满之后最旧的记录被丢弃。它维护的是一块内存中的环形缓冲,不是落盘日志,所以「能回看多久」完全由这个上限和慢命令的产生速度共同决定。
基本信息
| 配置项 | slowlog-max-len |
|---|---|
| 默认值 | 128 |
| 姊妹配置 | slowlog-log-slower-than(默认 10000 微秒,即 10 毫秒;0 记录全部命令,负数关闭) |
| 存储位置 | 实例内存 |
| 相关命令 | SLOWLOG GET / LEN / RESET |
典型使用场景
- 收到慢查询告警后要回看历史,但 128 条几分钟就被刷满
- 压测期间调大上限,保留完整样本供分析
- 重要变更前调大上限,让变更后的对比有足够数据
- 排查低频偶发慢命令,需要更长的观察窗口
- 配合外部周期采集,把慢日志归档到分析系统
调整与观察
调整与观察
redis-cli CONFIG GET slowlog-max-len slowlog-log-slower-than # 先看现状
redis-cli CONFIG SET slowlog-max-len 512 # 运行时调大上限
redis-cli SLOWLOG LEN # 当前条数
redis-cli SLOWLOG GET 3 # 最近 3 条:id/时间戳/耗时/命令
redis-cli INFO memory | grep used_memory_human # 评估内存余量
redis-cli CONFIG REWRITE # 需要持久化时写回配置文件配置与条目读法
| 项 | 含义 | 取值建议 |
|---|---|---|
| slowlog-max-len | 内存中保留的条目数 | 128 偏短,线上常放 512 至 1024 |
| slowlog-log-slower-than | 判定为慢的阈值(微秒) | 默认 10 毫秒,按业务 SLA 收紧或放宽 |
| SLOWLOG LEN | 当前条目数 | 长期等于上限说明记录在被持续刷掉 |
| timestamp | 命令执行的绝对时间(秒) | 直接与发布、告警时间对齐 |
| duration | 服务端执行耗时(微秒) | 不含网络往返,别与端到端延迟混为一谈 |
慢日志只统计服务端执行命令本身的时间,不含网络传输、排队与客户端处理;客户端观测到的慢和这里的慢不是同一个量。
条目里的命令参数会被截断,超长命令看不到完整内容,需要在应用侧补充上下文才能定位。
上限调大意味着内存里常驻更多日志条目;长跑实例应配合定期导出与清理,避免日志无界积压。
上限要与采集频率匹配:例如每 5 分钟导出一批,512 条通常足以覆盖突发;上限远大于采集速度能覆盖的量,只是白占内存。