【Redis】 慢查询日志
【Redis】 慢查询日志
Metadata
title: 【Redis】 慢查询日志
date: 2023-07-09 13:23
tags:
- 行动阶段/完成
- 主题场景/数据存储
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/数据存储/Redis
categories:
- 数据存储
keywords:
- 数据存储/Redis
description: 【Redis】 慢查询日志
概述
Redis 的慢查询日志功能用于记录执行时间超过给定时长的命令请求。可通过两个参数配置:
slowlog-log-slower-than
:执行时间超过多少微秒的命令会被记录到日志上。slowlog-max-len
:指定服务器最多保存多少条慢查询日志,超过时会删除最久的那条日志。
可以使用CONSIG SET slowlog-log-slower-than <microsecond>
直接修改配置,使用SLOWLOG GET
来查询慢查询日志。
- Redis的慢查询日志功能用于记录执行时间超过指定时长的命令。
- Redis服务器将所有的慢查询日志保存在服务器状态的slowlog链表中,每个链表节点都包含一个slowlogEntry结构,每个slowlogEntry结构代表一条慢查询日志。
- 打印和删除慢查询日志可以通过遍历slowlog链表来完成。
- slowlog链表的长度就是服务器所保存慢查询日志的数量。
- 新的慢查询日志会被添加到slowlog链表的表头,如果日志的数量超过slowlog-max-len选项的值,那么多出来的日志会被删除。
慢查询记录的保存
相关慢查询日志的属性记录在 redisServer 中:
struct redisServer {
//下一条慢查询日志的ID,初始为0,每产生一条就加1
long long slowlog_entry_id;
//保存了所有慢查询日志的链表
list *slow1og;
//服务器配置slowlog-log-slower-than选项的值
long 1ong slowlog_1og_slower_than;
//服务器配置slowlog-max-len选项的值
unsigned long slowlog_max_len;
// ...
};
slowlog 是一个链表,有几个节点就表示有几条慢查询日志,节点是一个 slowlogEntry 实例:
typedef struct slow1ogEntry {
//唯一标识符
long 1ong id;
//命令执行时的时间,格式为UNIX时间戥
time_t time;
//执行命令消耗的时间,以微秒为单位
1ong long duration;
//命令与命令参数
robj **argv;
//命令与命令参数的数量
int argc;
} slowlogEntry;
新添加的日志会呗放到 slowlog 的表头。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 蝶梦庄生!
评论