前言

Github:https://github.com/HealerJean

博客:http://blog.healerjean.com

1、慢查询分析

所谓的慢查询日志,就是在命令的执行前后计算每条命令的执行时间,当超过预设值,就将这条命令的相关信息记录下来,

redis命令执行分为4个步奏,发送命令,命令排队,执行命令,返回结果,这里的慢查询分析值统计执行命令的时间。

WX20180413-102037@2x

1.1、慢查询配置

1.1.1、预设阀值如何设置

慢查询的预设阀值 slowlog-log-slower-than

单位是微秒,默认值是1000,也就是10毫秒 ,如果一条命令的执行时间超过10000微妙,那么它将被记录在慢查询日志中。

如果slowlog-log-slower-than的值是0,则会记录所有命令。

如果slowlog-log-slower-than的值小于0,则任何命令都不会记录日志。

1.1.2、慢查询日志列表长度

慢查询日志的长度slowlog-max-len ,只是说明了慢查询日志最多存储多少记录

Redis使用了一个列表来存储慢查询日志,这个值就是列表的最大长度,当一个新的命令满足慢查询条件的时候就会被插入到这个列表中,当慢查询日志已经到达列表的最大长度时,又有慢查询日志要进入列表,则最早插入列表的日志将会被移出列表,新日志被插入列表的末尾。比如设置了5,当放入第6条的时候,第一条就会出列

1.2、修改配置的方法

1、通过配置文件修改

2。使用命令动态修改

config set slowlog-log-slower-than 2000
config set slowlog-max-len 1000

//将配置持久化到本地配置文件,
config rewrite

2、查看慢查询日志

虽然慢查询日志在Redis内存列表中,但是Redis并没有暴露这个列表的主键,而是通过一组命令来访问和管理的

2.1、获取慢查询日志

slowlog get

slowlog get n(n可以指定条数)  分别是查询日志的标识id,发送时间戳,命令耗时,执行命令,以及参数
slowlog get n(n可以指定条数)  分别是查询日志的标识id,发送时间戳,命令耗时,执行命令,以及参数

127.0.0.1:6379> config set slowlog-log-slower-than 0
OK
127.0.0.1:6379> set name healerjean
OK
127.0.0.1:6379> slowlog get
1) 1) (integer) 1
   2) (integer) 1523587843
   3) (integer) 5
   4) 1) "set"
      2) "name"
      3) "healerjean"
   5) "127.0.0.1:49894"
   6) ""
2) 1) (integer) 0
   2) (integer) 1523587826
   3) (integer) 5104
   4) 1) "config"
      2) "set"
      3) "slowlog-log-slower-than"
      4) "0"
   5) "127.0.0.1:49894"
   6) ""
127.0.0.1:6379> 

2.2、获取慢查询的列表当前的记录长度

当前有3条慢查询记录

127.0.0.1:6379> slowlog len
(integer) 3
127.0.0.1:6379> 

2.3、慢查询日志重置,实际上就是对列表进行清理

127.0.0.1:6379> slowlog reset
OK

3、慢查询的建议

慢查询功能能够帮我们找到Redis可能存在的瓶颈,但是在实际中主要建议下面得几点

1、slowlog-max-len

线上建议调大慢查询列表,记录慢查询的时候Reids会对长命令做拦截判断,并不会占用大量内存,增大查询列表可以减缓慢查询的被剔除的可能(因为超过长度就会将老的删除,我们后来就看不到了),例如线上可以设置1000以上

2、showlog-log-slower-than

建议配置,默认超过10毫秒判断为慢查询,其实是需要根据Redis并发量调整这个值,对于高流量的场景,建议设置为1毫秒

3、防止慢查询的队列丢失

这里牛逼了,慢查询是一种先进先出的队列,也就是说当慢查询比较多的时候回丢失部分慢查询的。为了防止这种现象发生,可以将它持久化到其他存储中(mysql),然后使用可视化工具进行查看,

4、因为Redis有排队机制,慢查询也可能造成其他命令阻塞,因此客户端出现命令超时的时候,需要检测该是否是因为慢查询导致的阻塞

ContactAuthor