Redis慢查询日志是一个记录超过指定执行时间的查询的系统。 这里的执行时间不包括IO操作,比如与客户端通信,发送回复等等,而只是实际执行命令所需的时间(这是唯一在命令执行过程中线程被阻塞且不能同时处理其他请求的阶段)。
如上图所示:Redis客户端一条命令执行分4个步骤:
- 发送命令
- 命令进入队列排队
- 执行命令
- 返回结果
慢查询统计的是第3步(执行命令)的时间
参数配置
慢查询有两个参数需要配置:
- [ ] slowlog-log-slower-than
表示慢查询预设的超时阀值,单位是微妙(μs)
1s = 1000ms = 1_000_000μs
默认10000微秒,即10毫秒
执行超过这个时间的命令将被记录到慢查询日志
slowlog-log-slower-than = 0:表示记录所有命令。
slowlog-log-slower-than < 0:表示不记录
- [ ] slowlog-max-len
表示慢查询日志的条数
默认为 128
Redis使用列表存储慢查询日志
当已经记录了128条慢查询,现在又来一条,最早记录的那条将被踢出,最新一条入列
动态修改配置
redis启动之后不方便关闭redis,可以动态配置慢查询,连接redis执行命令
config set slowlog-log-slower-than 1000
config set slowlog-max-len 1000
慢查询日志操作命令
获取慢查询队列
# 获取慢查询日志,n表示获取的条数
slowlog get [n]
每一个条目由四个字段组成:
1:每个慢查询条目的唯一的递增标识符。
2:处理记录命令的unix时间戳。
3:命令执行所需的总时间,以微秒为单位。
4:组成该命令的参数的数组。
条目的唯一ID可以用于避免慢查询条目被多次处理(例如,你也许有一个脚本使用每个新的慢查询日志条目给你发送报警邮件)。
条目ID在Redis服务器运行期间绝不会被重置,仅在Redis服务重启才重置它。
获取慢查询日志的当前长度
使用命令SLOWLOG LEN可以获得慢查询日志的长度。
slowlog len
清空慢查询日志
你可以使用命令SLOWLOG RESET来重置慢查询日志。
删除后,信息将永远丢失。
slowlog reset
慢查询运维经验
- slowlog-log-slower-than 不要设置过大,默认10ms, 通常设置1ms,得根据你项目的qps结合来配置这个时间
- slowlog-max-len 不要设置过小,通常设置1000左右
- 理解命令生命周期
- 定期做慢查询持久化(定期将慢查询日志导出来,分析其中的日志)