一、慢查询日志介绍
- Redis的慢查询日志功能用于记录执行时间超过给定时长的命令请求,用户可以通过这个功能产生的日志来监视和优化查询速度
二、慢查询日志选项
slowlog-log-slower-than选项:指定执行时间超过多少微秒(1秒等于1000 000微秒)的命令请求会被记录到日志上
- 举个例子,如果这个选项的值为100,那么执行时间超过100微秒的命令就会被记录到慢 查询日志
- 如果这个选项的值为500,那么执行时间超过500微秒的命令就会被记录到慢查询日志
slowlog-max-len选项:指定服务器最多保存多少条慢查询日志。
三、慢查询日志的数量溢出
服务器使用先进先出的方式保存多条慢查询日志,当服务器存储的慢查询日志数量等于slowlog-max-len选项的值时,服务器在添加一条新的慢查询日志之前,会先将最旧的一条慢查询日志删除
举个例子,如果服务器slowlog-max-len的值为100,并且假设服务器已经储存了100条慢 查询日志,那么如果服务器打算添加一条新日志的话,它就必须先删除目前保存的最旧的那条日志,然后再添加新日志/
四、慢查询日志的格式
以下面的图片为例:
1)日志的唯一标识符
2)命令执行时的UNIX时间戳
3)命令执行的时常(单位微秒)
4)命令以及命令参数
5)命令执行的客户端IP与端口
五、SLOWLOG命令
- SLOWLOG GET:用来查看服务器所保存的慢查询日志
- SLOWLOG RESET:用于清空所有慢查询日志
- SLOWLOG LEN:查询慢查询日志的数量
SLOWLOG GET演示案例
首先使用CONFIGSET命令将服务器slowlog-log-slower-than选项设置为0,那么每条执行的命令都会被记录到慢查询日志
然后再使用CONFIG SET命令将slowlog-max-len选项设置为5,那么服务器最多只能保存5条慢查询日志
接下来执行3条命令
记着查询慢查询日志,可以看到上面我们执行的5条命令
- 接着我们再次执行一次,SLOWLOG GET命令,由于slowlog-max-len选项的值为5,所以我们执行的命令将从前旧的记录删除了
六、慢查询记录的保存(struct slowlogEntry)
redisServer结构
struct redisServer {
// ...
//下一条慢查询日志的ID
long long slowlog_entry_id;
//保存了所有慢查询日志的链表
list *slowlog;
//