之前说过可以使用Redis的慢查询日志和latency monitor来排查执行较慢的命令操作
Redis的慢查询记录了执行时间超过了一定阈值的命令操作,在发现Redis响应变慢,请求延迟增加的时候,可以在慢查询日志中进行查找,哪些命令导致的执行时间过长
在使用慢查询日志之前,我们需要设置两个参数
slowlog-log-slower-than,此参数表示慢查询日志对执行时间大于多少微秒的命令进行记录
slowlog-max-len 慢查询日志能够最多记录多少条命令,慢查询日志底层实现是一个具有预定大小的先进先出的队列,一旦记录的命令数量超过了队列长度,最开始的命令操作就会被删除,这个值默认是128,如果慢查询命令较多,日志就会存不下,所以一般建议设置为1000左右,可以多记录些慢查询命令,方便排查,也避免内存开销
然后我们设置了执行阈值和存储上限之后,就可以使用SLOWLOG GET命令来查看慢查询日志中记录的命令操作,比如下面
SLOWLOG GET 1
1) (integer) 33 //每条日志的唯一ID编号
2) (integer) 1600990583 //命令执行时的时间戳 3) (integer) 20906 //命令执行的时长,单位是微秒 4) 1) “keys” //具体的执行命令和参数 2) “abc*” 5) “127.0.0.1:54793” //客户端的IP和端口号 6) “” //客户端的名称,此处为空 |
上面看出,KEYS “abc*”这条命令执行花费了20906微妙,大约是20毫秒,的确比较缓慢,如果需要查看更多的满日志,可以修改SLOWLOG GET后面的数字
除了直接执行SLOWLOG GET命令,Redis还提供了latency monitor,可以像上面的slowlog-log-slower-than的设置命令执行时长的阈值,当一个命令的实际时长超过了这个阈值的话,就会被latency monitor来监控到,可以将latency monitor监控的阈值设置为1000微妙
config set latency-monitor-threshold 1000
然后我们就可以使用latency latest命令,来查看最新的延迟情况
latency latest
1) 1) “command”
2) (integer) 1600991500 //命令执行的时间戳
3) (integer) 2500 //最近的超过阈值的延迟
4) (integer) 10100 //最大的超过阈值的延迟