慢日志是什么
慢日志记录执行时间超过阈值的命令,阈值单位是微秒,默认一万微秒也就是十毫秒。它是排查性能问题的优先入口:每条记录都包含命令、耗时与调用方信息,能直接指向具体命令与来源。需要注意的是它只统计命令执行耗时,不包含客户端排队与网络传输时间。
基本信息
| 阈值参数 | 单位微秒,默认一万微秒即十毫秒;零表示记录所有命令,负一表示关闭 |
|---|---|
| 保留条数 | 以列表形式保存,超过长度丢弃最旧的记录 |
| 记录内容 | 编号、时间戳、耗时、命令参数、客户端地址与名称 |
| 查看方式 | 查看当前条数、查看最近若干条、清空日志 |
| 性能开销 | 记录本身开销很小,阈值过低会显著增加内存与采集压力 |
| 适用范围 | 所有主流版本均支持 |
典型使用场景
- 接口变慢时定位是哪条命令耗时高
- 排查大键操作:大对象删除与过期清理会以命令形式出现
- 验证优化效果:调整后再看慢日志是否减少
- 定位调用来源:通过客户端地址与名称找到对应服务
- 定期巡检输出慢命令榜单
- 发现批量脚本在非预期时段执行
配置与读取
配置与读取
CONFIG GET slowlog-log-slower-than # 默认 10000 微秒,约十毫秒
CONFIG SET slowlog-log-slower-than 10000 # 按业务基线调整阈值
CONFIG SET slowlog-max-len 128 # 保留最近 128 条
SLOWLOG LEN # 当前记录条数
SLOWLOG GET 10 # 查看最近 10 条
SLOWLOG RESET # 清空,改动参数后重测时使用记录字段读法
| 字段 | 含义 | 排查用途 |
|---|---|---|
| 编号 | 自增序号 | 用于定位记录顺序 |
| 时间戳 | 命令执行时刻 | 与业务告警时间对齐 |
| 耗时 | 执行所用微秒数 | 判断是否真的慢 |
| 命令参数 | 命令名与参数 | 能看出操作了哪个键 |
| 客户端地址 | 调用来源 | 定位到具体服务 |
| 客户端名称 | 连接名称 | 客户端设置过名称时可见 |
| 条数上限 | 保留的记录条数 | 超长会丢弃最旧记录 |
慢日志只记执行耗时,不含排队与网络时间:客户端观察到的耗时更长是正常的,两者差距大往往说明链路上存在排队或网络问题。
大键的删除与过期清理会以命令形式出现在慢日志里;看到参数中是明显的大对象键名时,应优先检查大键治理情况。
把阈值调到零并长期开启,会让慢日志刷爆内存与采集系统,只适合短时间诊断,用完立刻恢复默认阈值。
慢日志使用检查清单
- 按业务基线设定阈值,不要照搬默认值
- 全量记录只在短时诊断时使用,用完即恢复
- 改动参数后清空旧记录,避免新旧数据混淆
- 把慢日志采集接入监控,形成趋势而不是临时翻看
- 结合客户端地址定位到具体服务与调用方
- 关注参数里的大键名,与键空间分析互相印证
慢日志记录的是服务端执行时间,客户端感知的总延迟还包括排队、网络与序列化:只拿慢日志解释用户侧延迟容易得出错误结论,两端数据要一起看。