文章目录
  1. 04_Redis慢查询分析
  2. 1. 简介
  3. 2. 配置参数
  4. 3. 慢日志查询
    1. 3.1 获取慢日志
    2. 3.2 获取慢查询列表长度
    3. 3.3 慢查询重置
  5. 4. 最佳实战

[TOC]

04_Redis慢查询分析

1. 简介

许多存储系统(如MySQL)提供慢查询日志帮助开发和运维定位系统存在的问题。所谓慢查询,就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将命令相关信息(发生时间、耗时、详细信息等)记录下来。

2. 配置参数

Redis提供两个参数用来控制慢查询:

1
2
3
4
5
6
# 单位微秒,默认10毫秒。
# 0表示记录所有,小于0表示不记录
slowlog-log-slower-than 10000

# 默认记录最多128个命令
slowlog-max-len 128

Redis内部使用一个列表用来存储慢查询日志,可以通过命令或者修改配置文件来修改配置参数:

1
2
3
4
5
config set slowlog-log-slower-than 20000
config set slowlog-max-len 1000
config rewrite

# config rewrite表示持久化到配置文件中

3. 慢日志查询

1
$ slowlog subcommand [argument]

3.1 获取慢日志

1
2
3
4
5
6
7
8
9
10
11
12
13
$ slowlog get [n]

> 示例
127.0.0.1:6379> slowlog get
1) 1) (integer) 666
2) (integer) 1520767396
3) (integer) 11666
4) 1) "SETEX"
2) "video_info_1"
3) "300"
4) "2"
......
......

慢日志包含四个部分:

  • 标识ID
  • 发生时间戳
  • 命令耗时
  • 执行的命令和参数

3.2 获取慢查询列表长度

1
2
3
4
5
$ slowlog len

> 示例
127.0.0.1:6379> slowlog len
(integer) 40

3.3 慢查询重置

1
2
3
4
5
6
7
8
9
$ slowlog reset

> 示例
127.0.0.1:6379> slowlog len
(integer) 40
127.0.0.1:6379> slowlog reset
OK
127.0.0.1:6379> slowlog len
(integer) 0

4. 最佳实战

使用过程中建议调大slowlog-max-len,并不会占用大量内存。增加慢日志列表长度可以减缓慢日志被剔除的可能。如设置1000以上。

slowlog-log-slower-than默认是10毫秒。需要根据redis的并发量调整该值。如果是高OPS场景可以设置为1毫秒。

慢日志记录的执行时间,并不包括命令排队和网络传输的时间。因此当客户端出现请求超时时,需要检查该时间点是否有对应慢查询。

由于slowlog-max-len的限制,可能会丢失部分慢查询日志,所以建议定期slowlog get将慢查询日志进行持久化,如存在MySQL中。

文章目录
  1. 04_Redis慢查询分析
  2. 1. 简介
  3. 2. 配置参数
  4. 3. 慢日志查询
    1. 3.1 获取慢日志
    2. 3.2 获取慢查询列表长度
    3. 3.3 慢查询重置
  5. 4. 最佳实战