深入Redis学习教程之慢查询slowlog教程

作者 : IT 大叔 本文共1030个字,预计阅读时间需要3分钟 发布时间: 2020-10-19

慢查询就是将查询时间长的操作记录下来。

客户端请求的生命周期:

深入Redis学习教程之慢查询slowlog教程插图

redis请求的生命周期

如上图所示可以分为4个阶段:
a.发送命令(消耗的是网络时间)
b.命令在队列中排队等待被执行(因为redis单线程,同一时间只能处理一个命令)
c.执行命令
d.返回结果(消耗网络时间)

说明:
慢查询发生在第三阶段,也就是说慢查询算的时间是第三阶段的时间,第三阶段执行操作所花的时间超过规定时间就会记录到慢查询中。

客户端超时不一定是因为慢查询(执行操作时间过长),还可能是因为命令排队耗时或者网络传输耗时。
但慢查询是客户端超时的一个可能因素。

每一个慢查询会被放入一个固定长度的先进先出的队列,而且慢查询的结果是保存到内存中,不会进行持久化的(重启清空)。
当一个查询被redis认定为是慢查询,那么该查询会被放入这个队列,当队列的长度满了之后,先进入的慢查询会被弹出。

两个有关慢查询的配置:
slowlog-max-len     # 慢查询队列长度,默认128
slowlog-log-slower-than     # 执行多长时间认定为慢查询,默认10000,单位微秒。(即10ms)

slowlog-log-slower-than=0    把所有操作都当成慢查询
slowlog-log-slower-than=-1   不记录任何慢查询

可以使用 config  set来动态设置这两个参数,因为redis开启之后不建议进行重启,所以不推荐通过修改配置文件的方式修改。
config set slowlog-max-len 128

慢查询命令

由于慢查询是写入到内存中,所以可以通过命令获取慢查询

slowlog get [n]     # 获取n条慢查询
slowlog len         # 获取共有几个慢查询
slowlog reset       # 清空慢查询

运维经验:
a. slowlog-max-len不要设置过大,默认10ms,通常设置为1ms
原因:redis的QPS一般是万级别的,所以每条请求处理时间平均为0.1ms。所以设1ms为慢查询时间比较合适。
但是还是要根据实际情况,一般是根据你服务端redis的QPS而定。

b. slowlog-log-slower-than 不要设置过小,默认128,通常设为1000

c. 理解命令生命周期

d. 定期持久化慢查询
由于慢查询是存到内存中,所以重启redis会清空慢查询队列;而且慢查询数量超过队列的长度后,旧的慢查询会被弹出销毁。可以通过写脚本调用slowlog get 将慢查询写入到mysql进行长久保存。

免责声明:
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » 深入Redis学习教程之慢查询slowlog教程

常见问题FAQ

没有金币/金币不足 怎么办?
本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
所有资源普通会员都能下载吗?
本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。

发表评论