Redis是单线程操作,如果一个命令执行耗时较长的操作,就会阻塞其他请求,严重会影响整个平台的稳定.慢日志监控的重要性也就体现处理了.
在讲解pipeline时,曾讲过命令执行的4个阶段:
1.发送命令
2.命令排队
3.命令执行
4.返回结果
慢日志主要是监控记录命令执行阶段的命令相关信息.
这些执行慢的命令是保存在一个先进先出队列中,这个队列的长度固定,当队列满了之后会移除掉最先保存的数据.并且这个队列只保存到内存中,不会持久化.
这个队列的长度和时间阈值都是通过redis.conf配置的,
配置如下:
#慢日志时间阈值,单位:微妙slowlog-log-slower-than 10000#慢日志队列长度slowlog-max-len 128
通过config命令动态配置
127.0.0.1:6379> config get slowlog*1) "slowlog-log-slower-than"2) "10000"3) "slowlog-max-len"4) "128"
慢日志操作命令
使用debug sleep模拟长时间查询操作
127.0.0.1:6379> debug sleep 1OK(1.00s)
查询慢日志数据
结果含义:
1) 每个慢日志条的唯一累进标识符
2) 记录命令执行的Unix时间戳
3) 命令执行所需的时间(以微秒为单位)
4) 组成命令参数的数组
5) 客户端IP地址和端口
6) 客户端名称(如果通过CLIENT SETNAME命令设置)
127.0.0.1:6379> slowlog get 101) 1) (integer) 2 2) (integer) 1589791533 3) (integer) 1001795 4) 1) "debug" 2) "sleep" 3) "1" 5) "127.0.0.1:55526" 6) ""
查看慢日志数量
127.0.0.1:6379> slowlog len(integer) 1
重置慢日志数据
127.0.0.1:6379> slowlog resetOK
注意事项
1. 时间阈值不要设置过大,不利于正确记录那些会影响到服务的命令
2. 队列长度不要过小,不利于数据保存
3. 因为队列信息不会自动持久化,需要人为持久化处理