Redis深入之路(十六)

慢查询日志

慢查询日志功能用于记录执行时间超过给定时间的命令,帮助用户监视和优化查询速度。

// slowlogEntry 慢查询日志记录结构
typedef struct slowlogEntry {

    // 日志唯一标识符 ID
    long long id;

    // 命令执行的时间,UNIX 时间戳
    time_t time;    

    // 命令执行所消耗的时间,单位:微秒
    long long duration;

    // 命令参数
    robj **argv;

    // 命令参数数量
    int argc;

} slowlogEntry;


// redis服务器结构
struct redisServer {
    // ...

    // 下一条慢查询日志 ID,初始值 0,每当有新记录产生时,值递增 1
    long long slowlog_entry_id;

    // 所有慢查询日志的链表,保存的是 slowlogEntry 结构
    list *slowlog;

    // 服务器配置(redis.conf),慢查询日志时间
    long long slowlog_log_slower_than;

    // 服务器配置(redis.conf),慢查询日志保存记录数
    unsigned long slowlog_max_len;

    // ...
};

配置

slowlog-log-slower-than

定义:当命令执行的时间超过 slowlog-log-slower-than 指定的值,则此命令将被记录到慢查询日志中。
单位:微秒(一秒 = 1 000 000 微秒)。

slowlog-max-len

定义:最多保存的慢查询日志记录数。
实现:慢查询日志记录数等于 slowlog-max-len 时,服务器在添加一条新的慢查询日志时,先删除最旧的那条慢查询日志(日志队列,FIFO)。

slowlog get 命令

查看服务器所报存的慢查询日志。

重点

  • Redis 的慢查询日志功能用于记录执行的时间长度超过指定时间的命令。
  • Redis 将所有的慢查询日志保存在服务器结构 redisServer 的 slowlog 链表中,每个链表节点包含一个 slowlogEntry 结构,每个 slowlogEntry 结构代表一个慢查询日志。
  • 通过遍历 redisServer 结构的 slowlog 链表实现打印和删除日志功能。
  • 慢查询日志的数量等于服务器保存的 slowlog 链表的长度。
  • 新的慢查询日志会被添加到 slowlog 链表头,如果日志数量超过 slowlog-max-len,slowlog 链表尾的日志将被删除。

你可能感兴趣的:(redis)