Redis 慢日志

2022-06-20 19:54:05 浏览数 (2)

Redis是单线程操作,如果一个命令执行耗时较长的操作,就会阻塞其他请求,严重会影响整个平台的稳定.慢日志监控的重要性也就体现处理了.

在讲解pipeline时,曾讲过命令执行的4个阶段:

1.发送命令

2.命令排队

3.命令执行

4.返回结果

慢日志主要是监控记录命令执行阶段的命令相关信息.

这些执行慢的命令是保存在一个先进先出队列中,这个队列的长度固定,当队列满了之后会移除掉最先保存的数据.并且这个队列只保存到内存中,不会持久化.

这个队列的长度和时间阈值都是通过redis.conf配置的,

配置如下:

代码语言:javascript复制
#慢日志时间阈值,单位:微妙
slowlog-log-slower-than 10000
#慢日志队列长度
slowlog-max-len 128

通过config命令动态配置

代码语言:javascript复制
127.0.0.1:6379> config get slowlog*
1) "slowlog-log-slower-than"
2) "10000"
3) "slowlog-max-len"
4) "128"

慢日志操作命令

使用debug sleep模拟长时间查询操作

代码语言:javascript复制
127.0.0.1:6379> debug sleep 1
OK
(1.00s)

查询慢日志数据

结果含义:

1) 每个慢日志条的唯一累进标识符

2) 记录命令执行的Unix时间戳

3) 命令执行所需的时间(以微秒为单位)

4) 组成命令参数的数组

5) 客户端IP地址和端口

6) 客户端名称(如果通过CLIENT SETNAME命令设置)

代码语言:javascript复制
127.0.0.1:6379> slowlog get 10
1) 1) (integer) 2
   2) (integer) 1589791533
   3) (integer) 1001795
   4) 1) "debug"
      2) "sleep"
      3) "1"
   5) "127.0.0.1:55526"
   6) ""

查看慢日志数量

代码语言:javascript复制
127.0.0.1:6379> slowlog len
(integer) 1

重置慢日志数据

代码语言:javascript复制
127.0.0.1:6379> slowlog reset
OK

注意事项

1. 时间阈值不要设置过大,不利于正确记录那些会影响到服务的命令

2. 队列长度不要过小,不利于数据保存

3. 因为队列信息不会自动持久化,需要人为持久化处理

0 人点赞