慢日志条目是什么
SLOWLOG 记录的是命令实际执行耗时超过 slowlog-log-slower-than 阈值的调用,默认阈值 10000 微秒(10 毫秒)。它只统计命令执行本身,不含网络收发、排队与客户端处理,所以慢日志里找不到的慢,很可能慢在网络或客户端侧。每条记录给出编号、时间、耗时、命令参数与来源客户端,回答的是「哪条命令、谁在跑、跑了多久」。
基本信息
| 命令族 | SLOWLOG GET / LEN / RESET |
|---|---|
| 阈值参数 | slowlog-log-slower-than,单位微秒,默认 10000;0 记录所有命令,负数关闭 |
| 容量参数 | slowlog-max-len,内存中保留条数,默认 128,超出后旧条目被挤掉 |
| 耗时口径 | 仅命令执行阶段,不含网络收发与排队 |
| 查看方式 | redis-cli 会格式化输出,其他客户端拿到的是原始数组 |
条目字段逐列读法
| 字段 | 含义 | 判读要点 |
|---|---|---|
| id | 自增编号,实例重启后归零 | 对比两次 GET 的新增编号,可知这段时间新增了哪些慢命令 |
| timestamp | 发生时间,Unix 秒 | 换算成本地时间后再与业务日志对齐,避免时间段错位 |
| duration | 执行耗时,单位微秒 | 1000000 微秒等于 1 秒,先看量级再谈根因 |
| args | 命令与参数,7.0 起超长参数会截断 | 看命令形状:KEYS、HGETALL、大集合全量取数是常见大头 |
| client_addr | 来源地址 | 定位到具体业务实例,避免把客户端坏用法误判成服务端问题 |
| client_name | 连接名,客户端设置过才有 | 连接名规范化时可以据此直接定位应用模块 |
典型使用场景
- 发布后确认耗时是否符合预期,抓出比预期慢的写法
- 容量评估:统计慢命令出现频率,判断是偶发还是结构性
- 定位来源:结合 client_addr 与 client_name 找到发起方的应用与实例
- 改动验证:调整数据结构或命令写法后,重跑同一流程看是否还上榜
- 与 LATENCY 事件对照:区分「命令本身慢」与「等待后台任务或系统资源」
常用命令
常用命令
redis-cli SLOWLOG LEN # 当前积压条数
redis-cli SLOWLOG GET 5 # 取最近 5 条,最新在前
redis-cli SLOWLOG RESET # 清空后重新观察一轮
redis-cli CONFIG GET slowlog-* # 确认阈值与容量
redis-cli CONFIG SET slowlog-log-slower-than 5000 # 临时收紧到 5 毫秒
redis-cli CONFIG SET slowlog-max-len 512 # 多留一些条便于对照阈值调到 0 会把所有命令记进来,高并发下内存与运维噪声都会明显增长,只在短窗口排查时使用,用完立刻改回默认值。
SLOWLOG RESET 不可撤销;需要留存证据时先 SLOWLOG GET 1000 导出再清理,否则问题现场直接丢失。