Redis-慢查询
生命周期
redis执行一条命令的生命周期分为4个阶段:
- 发送命令
- 命令排队(单线程)
- 执行命令
- 返回结果
注意:
(1)慢查询发生在第3阶段。
(2)客户端超时不一定是慢查询导致的,但是慢查询是客户端超时的一个可能影响因素。
配置
slowlog-max-len:
(1) 先进先出的队列
(2)固定长度
(3)保存在内存中
slowlog-log-slower-than:
(1)慢查询阈值(单位:微秒)
(2)slowlog-log-slower-than=0 记录所有命令为慢查询命令
(3)slowlog-log-slower-than<0 所有命令都不记录
默认值
config get slowlog-max-len = 128
config get slowlog-log-slower-than = 10000
配置方式:
(1)修改配置文件重启(并不建议你这么干,因为需要重启redis)
(2)动态配置,使用config set
一般配置:
slowlog-log-slower-than 不要设置过大,默认为10毫秒,通常设置为1毫秒,为什么要这个值?
因为redis单机号称10万QPS,正常我们能达到万级别的QPS,平均一条命令执行时间为0.1毫秒,因此如果命令执行超过1毫秒我们就认为它影响到我们的QPS了。当然这个还是要根据实际业务情况来设置,像极了你问你妈炒菜放多少盐多少油合适,她会告诉你,适量就好。
slowlog-max-len 也是同样的道理,但是不能设置太小,通常设置在1000左右。这又是为什么呢?
慢查询是一个先进先出的队列,因此如果队列长度设置过小,随着系统运行慢查询命令累积变多,前面的命令都会丢失,不利于我们分析问题。
由于慢查询存储在内存中,redis重启就会清空,在实际生产可以使用slowlog get[n]命令将慢查询命令序列化到持久化介质中,例如mysql,方便后期分析问题。
慢查询命令
- slowlog get[n] :获取慢查询队列
- slowlog len : :获取慢查询队列长度
- slowlog reset : 清空慢查询队列