slowlog 命令

slowlog 命令用于读取和重置 Redis 慢查询日志。

语法

SLOWLOG subcommand[argument]


Redis 慢日志系统

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

配置慢日志有两个参数:

  • slowlog-log-slower-than 设置执行时间(微秒),超过这个执行时间的命令会被记录。负数表示关闭慢日志,0表示记录所有命令。
  • slowlog-max-len 设置记录慢日志的最大长度。最小值是0。当一个新命令被记录并且慢日志已经达到了最大长度,那么最老的记录将被删除,以便空间来记录新命令。

可以通过编辑 redis.conf 来配置上面的两个参数,或者使用 CONFIG GET 和 CONFIG SET 配置运行中的实例。

读取 slow log

慢日志记录在内存中,不会写到文件上。所以即使记录所有执行的命令到慢日志中性能开销也很小。

读取慢日志命令:

  • SLOWLOG GET 返回每一条慢日志。
  • SLOWLOG GET n 返回最新的n条慢日志。

注意:请使用新版 redis-cli 以便能解析慢日志输出,较老版本的 redis-cli 不支持多行嵌套。

响应输出格式

redis> 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"

Redis 4.0 及之后版本新增域:

5) "127.0.0.1:58217"
6) "worker-123"

每条慢日志由 4 或 6 部分组成:

  • 每条慢日志有一个递增的唯一 ID。
  • 记录慢日志的 Unix 时间戳。
  • 执行这个命令花费的时间,单位是微妙。
  • 数组形式的命令参数。
  • 客户端 ip 和端口(4.0 only)。
  • 通过 CLIENT SETNAME 命令设置的客户端名字(4.0 only)。

可以用唯一 ID 来避免慢日志被处理多次(例如你有一个每当产生新的慢日志发送报警的脚本)。

ID 在 Redis 运行期间不会重置,Redis 重启之后会重置 ID。

查询当前 slowlog 的长度

SLOWLOG LEN 获取 slow log 的长度。

重置 slow log

SLOWLOG RESET 命令用来重置 slowlog。一旦删除 slowlog 不可恢复。