慢查询
当命令的执行时间到达预设的阈值时会加入到慢查询日志队列中,记录这些执行慢的命令有助于分析优化查询
- 慢查询队列存储在内存中,在重启数据库后会消失,可以定期的做一些持久化
- 慢查询队列是固定长度的,在慢的情况下,会遵循先进先出原则,将新的记录加入队列,旧的记录踢出队列
执行命令生命周期
- 客户端发送命令
- 由于Redis是单线程的,在命令到达服务端时会进入命令队列排队
- 当排到这条命令时,执行该命令
- 返回给客户端执行结果
慢查询是发生在第3阶段的,即命令执行的速度非常慢,并非网络原因
慢查询的配置项
- 可在配置文件中进行配置
- 也可以使用
config set
命令后跟配置项进行配置,相对的config get
即可查看对应的配置项的值
配置项 | 描述 | 默认值 |
---|---|---|
slowlog-max-len |
慢查询队列的容量大小 | 128 |
slowlog-log-slower-then |
慢查询的时间阈值,单位微妙,若设置负数则不会记录任何命令 | 10000(10毫秒) |
慢查询命令
slowlog get
:从慢查询队列中获取指定条目慢查询,若不指定条目会列出所有slowlog len
:获取慢查询队列中有多少个慢查询slowlog reset
:清空慢查询队列
慢查询的存储结构
将时间阈值设置为0后会记录所有的命令,可以清楚的看到慢查询日志队列
127.0.0.1:6379> slowlog get
1) 1) (integer) 0 #慢查询日志的唯一ID标识,从零开始逐渐递增
2) (integer) 1602665760 #该条命令的执行的日期时间
3) (integer) 2 #该条命令执行所耗时间,单位微秒
4) 1) "slowlog" #命令以及参数
2) "reset"
Comments NOTHING