深入Redis之 慢查询slowlog (二)-张柏沛IT博客

正文内容

深入Redis之 慢查询slowlog (二)

栏目:Linux 发布时间:2020-02-23 14:54 浏览量:182

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

客户端请求的生命周期:

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进行长久保存。

如果您需要转载,可以点击下方按钮可以进行复制粘贴;本站博客文章为原创,请转载时注明以下信息

张柏沛IT技术博客 > 深入Redis之 慢查询slowlog (二)

热门推荐
推荐新闻