如何分析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对于任何命令都不会进行记录code

  • 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并无暴露这个列表的键,而是经过一组命令来实现对慢查询日志的访问和管理get

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

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

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

  • 慢查询日志重置 slowlog reset配置

因为慢查询日志是一个先进先出的队列,也就是说若是慢查询比较多的状况下,可能会丢失部分慢查询命令,为了防止这种状况发生,能够按期执行slow get命令将慢查询日志持久化到其余存储中(例如MySQL),而后能够制做可视化界面进行查询请求

相关文章
相关标签/搜索