之前说过可以使用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          //最大的超过阈值的延迟

发表评论

邮箱地址不会被公开。 必填项已用*标注