功能概述

慢请求引起的连接超时等问题是影响 Redis 服务质量的常见问题,通过查询慢日志能够帮助用户快速找到慢请求问题发生的位置,定位发出请求的客户端 IP,为解决超时问题提供可靠的依据。

Redis 慢日志是将命令执行时间超过指定值的记录在 Reids 内部的一个列表中。需要注意的是,慢日志中统计的命令执行时间不包括与客户端通信以及命令在单线程队列上的排队延迟,而只是实际执行命令所需的时间。因此,客户端执行命令的时间会大于命令实际执行的时间。

操作步骤

步骤一:配置慢日志参数

修改配置参数 slowlog-log-slower-thanslowlog-max-len,详情可参考修改集群配置参数。待修改参数说明如下。

参数 说明

slowlog-log-slower-than

  • 设置慢查询阈值,执行时间超过该阈值后会被记录到慢日志。单位为微秒 μs

  • 设置为负数会禁用慢日志,设置为 0 会强制记录每个命令。

  • 不要设置过大,通常设置 1ms

slowlog-max-len

  • 设置慢日志的长度。当记录新命令并且慢速日志已达到其最大长度时,最旧的命令将从记录的命令队列中删除以腾出空间。

  • 不要设置过小,通常设置 1000 左右。

步骤二:查看慢日志

  1. 使用 redis-cli 连接到 Redis 数据库。详情参考连接数据库

  2. 执行以下命令行,读取慢日志。其中 <n> 用于指定查看条数。

    slowlog get <n>
  3. 执行成功后,系统显示类似如下信息。

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

    以及 Redis 4.0 或更高版本的可选字段:

    5) "127.0.0.1:58217"
    6) "host-123"
  4. 查询结果说明如下。

    参数 说明

    1)

    慢查询记录 ID。

    2)

    处理记录命令的 Unix 时间戳。

    3)

    执行所需的时间,以 微秒 为单位。

    4)

    该条记录的命令及参数。

    5)

    客户端 IP 地址和端口,仅限 v4.0 或更高版本。

    6)

    客户端名称,仅限 v4.0 或更高版本。

  5. 其他相关命令说明。

    • slowlog len 用于获取慢查询队列长度。

    • slowlog reset 用于清空慢查询队列。