Redis 慢查询

世界以痛吻我,我仍报之以歌。

服务器慢查询相关配置

  • slowlog-log-slower-than 选项指定执行时间超过多少微秒(1秒等于1000 000微秒)的命令请求会被记录到日志上。
  • slowlog-max-len 选项指定服务器最多保存多少条慢查询日志。

慢查询记录的结构

服务器 slowlog 链表保存了服务器中的所有慢查询日志,链表中的每个节点都保存了一个 slowlogEntry 结构,每个 slowlogEntry 结构代表一条慢查询日志:

1
2
3
4
5
6
7
8
9
10
11
12
typedef struct slowlogEntry {
    //唯一标识符
    long long id;
    //命令执行时的时间,格式为UNIX时间戳
    time_t time;
    //执行命令消耗的时间,以微秒为单位
    long long duration;
    //命令与命令参数
    robj **argv;
    //命令与命令参数的数量
    int argc;
} slowlogEntry;

示例

获取慢查询日志

命令:slowlog get [n]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
127.0.0.1:6379> slowlog get
 1) 1)  456     // 慢查询记录 id
    2)  1531632044      // 发起命令的时间戳
    3)  3       // 命令耗时,单位为微秒
    4) 1) "get"     // 该条记录的命令及参数
       2) "m"
    5) "127.0.0.1:50106"    // 客户端网络套接字(ip: port
 2) 1)  455
    2)  1531632037
    3)  14
    4) 1) "keys"
       2) "*"
    5) "127.0.0.1:50106"
    ...

获取当前慢查询日志记录数

命令:slowlog len

1
2
127.0.0.1:6379> slowlog len
458

慢查询日志重置

命令:slowlog reset

1
2
127.0.0.1:6379> slowlog reset
ok