一、Redis Slowlog概述
Redis Slowlog是排查性能问题关键监控指标。它是记录Redis queries运行时间超时特定阀值的系统。
这类慢查询命令被保存到Redis服务器的一个定长队列,最多保存slowlog-max-len(默认128)个慢查询命令。
当慢查询命令达到128个时,新产生的慢查询被加入前,会从队列中删除最旧的慢查询命令。
二、Redis Slowlog的配置
redis slowlog通过2个参数配置管理,默认命令耗时超过10毫秒,就会被记录到慢查询日志队列中;队列默认保存最近产生的128个慢查询命令。
slowlog-log-slower-than #慢查询阀值,单位微秒. 默认100000(10毫秒);
slowlog-max-len #慢查询存储的最大个数,默认128;
生产环境可以适当调小阈值调大个数,慢查询不会占用过多的内存。
三、Redis Slowlog读取
redis-cli客户端通过slowlog get指令获取最新10条慢查询命令。
127.0.0.1:6381> SLOWLOG get 2
1) 1) (integer) 6
2) (integer) 1458734263
3) (integer) 74372
4) 1) "hgetall"
2) "max.dsp.blacklist"
2) 1) (integer) 5
2) (integer) 1458734258
3) (integer) 5411075
4) 1) "keys"
2) "max.dsp.blacklist"
分析slowlog query:
以第一个HGET命令为例分析,每个slowlog实体共4个字段:
- 字段1:1个整数,表示这个slowlog出现的序号,server启动后递增, 当前为6.
- 字段2:表示查询执行时的Unix时间戳(秒级)
- 字段3:表示查询执行微妙数,当前是74372微妙,约74毫秒ms.
- 字段4: 表示查询的命令和参数,如果参数很多或很大,只会显示部分并给数参数个数;
四、Redis Slowlog注意事项
而Redis的慢查询只记录自己“被cpu服务的时间”(redis处理),不包含排队等待、IO等待(如AOF SYNC)这类时间。
但是一个完整的请求是包括网络建联、排队等待、redis处理、数据返回的,所以这这个指标只能用来排查redis key和redis命令是否合理,对于操作系统网络或者IO引起的问题,无能为力。
那还有方法可以监控到完整的响应时间么?
tcprstat 工具可以监控TCP层完整的响应时间。但是他工作在TCP层,无法探知是哪个Redis命令。
转载请注明:IPCPU-网络之路 » Redis Slowlog慢查询日志