Redis 系列之慢查询日志

Redis慢查询日志概述

Redis慢查询日志是一个记录超过指定执行时间的查询的系统。 这里的执行时间不包括IO操作,比如与客户端通信,发送回复等等,而只是实际执行命令所需的时间(这是唯一在命令执行过程中线程被阻塞且不能同时处理其他请求的阶段)。

Redis 执行生命周期

我们的 慢查询 是在第三个步骤,慢查询是记录执行命令的时间。客户发送命令,排队这些都不含在慢查询的时间内,仅仅只记录执行命令耗费的时间。有时候我们分析客户端超时的时候,不一定是慢查询,有可能第一个阶段和第四个阶段出现超时,但是有慢查询是客户端超时的其中一个原因。

慢查询的配置参数
slowlog-max-len
slowlog-log-slower-than

slowlog-max-len

slowlog-max-len 是慢查询日志的长度。实际上,Redis使用了一个列表来存储慢查询日志。Redis 使用了一个List 实现了一个先进先出的队列。当 第三阶段 执行的命令符合慢查询设置的时间,那么这个命令就会被插入到这个队列当中。这个 List 是一个固定的长度,其次是保存在内存当中。

slowlog-log-slower-than

slowlog-log-slower-than就是那个预设阈值,它的单位是微秒(1秒=1000毫秒=1000000微秒),默认值10000。slowlog-log-slower-than 告诉Redis命令的执行时间超过多少微秒将会被记录。 请注意,使用负数将会关闭慢查询日志,而值为0将强制记录每一个命令。
也就是 slowlog-log-slower-than=0,那么系统会记录所有的命令;如果slowlog-log-slower-than<0,那么对任何命令都不会记录。

查看当前系统此参数的配置

127.0.0.1:6379> config get slowlog-max-len
1) "slowlog-max-len"
2) "128"
127.0.0.1:6379> config get slowlog-log-slower-than
1) "slowlog-log-slower-than"
2) "10000"
127.0.0.1:6379>

由此可知:系统默认 slowlog-max-len 的长度是 128,slowlog-log-slower-than 阈值是:10000 微秒。相当于 10 毫秒。

配置方法

修改配置文件重启(不推荐)

因为 慢查询 是基于内存的,一旦重启后,里面的数据将会丢失。除非刚刚开始安装的时候就在配置文件中配置好。
找到我们的 Redis 配置文件: redis.conf,打开该文件,修改他们的值后,然后重启。

slowlog-log-slower-than 10000
slowlog-max-len 128

动态配置(推荐)

config set slowlog-max-len 500
config set slowlog-log-slower-than 5000

127.0.0.1:6379> config set slowlog-max-len 500
OK
127.0.0.1:6379> config set slowlog-log-slower-than 5000
OK
127.0.0.1:6379> config get slowlog-max-len
1) "slowlog-max-len"
2) "500"
127.0.0.1:6379> config get slowlog-log-slower-than
1) "slowlog-log-slower-than"
2) "5000"

慢查询的命令

读取慢查询日志
请使用SLOWLOG GET命令,此命令返回慢查询日志中的每一个条目。 可以只返回最近的N个条目,通过给命令传入一个额外的参数(例如:SLOWLOG GET 10)。

redis 127.0.0.1:6379> slowlog get 2
1) 1) (integer) 14
  2) (integer) 1309448221
  3) (integer) 15
  4) 1) "ping"
2) 1) (integer) 13
  2) (integer) 1309448128
  3) (integer) 30
  4) 1) "slowlog"
    2) "get"
    3) "100"

每一个条目由四个字段组成:

1:每个慢查询条目的唯一的递增标识符。
2:处理记录命令的unix时间戳。
3:命令执行所需的总时间,以微秒为单位。
4:组成该命令的参数的数组。

条目的唯一ID可以用于避免慢查询条目被多次处理(例如,你也许有一个脚本使用每个新的慢查询日志条目给你发送报警邮件)。

条目ID在Redis服务器运行期间绝不会被重置,仅在Redis服务重启才重置它。

获取慢查询日志的当前长度
使用命令SLOWLOG LEN可以获得慢查询日志的长度。

127.0.0.1:6379> slowlog len
(integer) 0

重置慢查询日志
你可以使用命令SLOWLOG RESET来重置慢查询日志。

删除后,信息将永远丢失。

127.0.0.1:6379> slowlog reset
OK

慢查询 推荐 参数设置
slowlog-max-len 默认是128,不要设置过小,通常设置 1000。
slowlog-log-slower-than 默认是10毫秒, 我们知道redis 是基于内存的,内存的速度特别快,因此这里推荐设置1毫秒。
定期做 慢查询 的持久化。我们知道 慢查询是先进先出的,因此当数量到达一定的长度,会有一些慢查询会丢失。因此定期 将慢查询 持久化到 数据库,方便我们日后分析。

上一篇:期末预测之安全指数(202012-2/CCF)———附带思路和完整代码


下一篇:Redis | 第10章 二进制数组、慢查询日志和监视器《Redis设计与实现》