如何分析redis中的慢查询

慢查询的两个参数配置

慢查询只记录命令执行时间,并不包括命令排队和网络传输时间。因此客户端执行命令的时间会大于命令实际执行时间。因为命令执行排队机制,慢查询会导致其他命令级联阻塞,因此当客户端出现请求超时,需要检查该时间点是否有对应的慢查询,从而分析出是否为慢查询导致的命令级联阻塞

Redis提供了slowlog-log-slower-than和slowlog-max-len配置来解决这两个问题

  • slowlog-log-slower-than:慢查询预定阀值,单位是微秒,默认值是10000,如果一条命令的执行时间超过了10000微秒,那么他将被记录在慢查询日志中

如果slowlog-log-slower-than=0会记录所有的命令,slowlog-log-slower-than<0对于任何命令都不会进行记录

  • slowlog-max-len:Redis使用了一个列表来存储慢查询日志,slowlog-max-len就是列表的最大长度,一个新的命令满足慢查询条件时被插入到这个列表中,当慢查询日志列表已处于其最大长度时,最早插入的一个命令将从列表中移出

在Redis中有两种修改配置的方法,一种是修改配置文件,另一种是使175用config set命令动态修改。例如下面使用config set命令将slowlog-log-slower-than设置为20000微秒,slowlog-max-len设置为1000

config set slowlog-log-slower-than 20000
config set slowlog-max-len 1000
config rewrite

如果要Redis将配置持久化到本地配置文件,需要执行config rewrite命令

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

  • 获取慢查询日志 slowlog get [n]

每个慢查询日志有4个属性组成,分别是慢查询日志的标识id、发生时间戳、命令耗时、执行命令和参数

  • 获取慢查询日志列表当前的长度 slowlog len

  • 慢查询日志重置 slowlog reset

由于慢查询日志是一个先进先出的队列,也就是说如果慢查询比较多的情况下,可能会丢失部分慢查询命令,为了防止这种情况发生,可以定期执行slow get命令将慢查询日志持久化到其他存储中(例如MySQL),然后可以制作可视化界面进行查询

posted @ 2019-05-24 11:12  木易森林  阅读(1588)  评论(0编辑  收藏  举报