Redis 怎样找出慢查询?

2022-04-25 09:16:50 浏览数 (1)

跟众多数据库的慢查询一样,平时不希望看到,但是数据库响应慢的时候,又希望能在慢查询中找到罪魁祸首。这一节内容,就来简单聊聊如何在 Redis 中找到慢查询。

Redis 可以记录执行时间超过某个阈值的命令,这个阈值由参数 slowlog-log-slower-than 控制,单位是微秒,默认值 10000。

参数 slowlog-max-len 可以控制保存慢日志的条数,Redis 底层是使用列表来存储慢查询日志,slowlog-max-len 就是列表的最大长度。当慢查询数达到该参数配置的值时,如果继续有新增的慢查询,则最早插入的慢查询会被删除。

可通过下面命令获取到所有慢查询:

代码语言:javascript复制
127.0.0.1:6379> slowlog get
1) 1) (integer) 0
   2) (integer) 1647236811
   3) (integer) 30541
   4) 1) "SLOWLOG"
      2) "GEY"
   5) "127.0.0.1:47252"
   6) ""

慢日志中,每个结果都包含以下六个值,可与上面列子一一对应:

  1. 每个慢日志的唯一 ID;
  2. 命令执行的时间戳;
  3. 命令以及参数;
  4. 客户端IP地址和端口;
  5. 客户端名称(假如通过 client setname 设置了)。

查看有多少慢查询:

代码语言:javascript复制
127.0.0.1:6379> slowlog len
(integer) 1

获取其中一条慢查询:

代码语言:javascript复制
127.0.0.1:6379> slowlog get 1
1) 1) (integer) 0
   2) (integer) 1647236811
   3) (integer) 30541
   4) 1) "SLOWLOG"
      2) "GEY"
   5) "12

清空慢查询记录:

代码语言:javascript复制
127.0.0.1:6379> slowlog reset
OK

Redis 慢查询注意点:

  • 慢查询只记录命令执行时间,并不包括命令排队和网络传输时间;
  • 生产环境 slowlog-max-len 可以配置 1000 以上,方便我们查看,Redis 记录慢查询时,会对长命令做截断操作,并不会占用过多内存;
  • slowlog-log-slower-than 默认为 10000,对 QPS 要求更高的场景,可把 slowlog-log-slower-than 调整的更小,比如 1000;
  • 如果想对慢查询做持久化,可以监听慢查询的变化,比如 slowlog get 之后,过滤出第一个字段(ID字段),如果 ID 有变化,则获取慢查询详情,写入其他其他关系型数据库中。或者借助其他工具,比如 CacheCloud。

0 人点赞