编辑
2023-10-29
缓存中间件
0
请注意,本文编写于 202 天前,最后修改于 50 天前,其中某些信息可能已经过时。

服务器配置有两个和慢查询日志相关的选项:

​ slowlog-log-slower-than选项指定执行时间超过多少微秒(1秒等于1 000 000微秒)的命令请求会被记录到日志上。举个例子,如果这个选项的值为100,那么执行时间超过100微秒的命令就会被记录到慢查询日志;如果这个选项的值为500,那么执行时间超过500微秒的命令就会被记录到慢查询日志。

​ slowlog-max-len选项指定服务器最多保存多少条慢查询日志。服务器使用先进先出的方式保存多条慢查询日志,当服务器存储的慢查询日志数量等于slowlog-max-len选项的值时,服务器在添加一条新的慢查询日志之前,会先将最旧的一条慢查询日志删除。举个例子,如果服务器slowlog-max-len的值为100,并且假设服务器已经储存了100条慢查询日志,那么如果服务器打算添加一条新日志的话,它就必须先删除目前保存的最旧的那条日志,然后再添加新日志。

最佳实践

slowlog-max-len配置建议:线上建议调大慢查询列表,记录慢查询时,Redis会对长命令做截断操作,并不会占用大量命令。可以设置为1000以上。

slowlog-log-slower-than配置建议:默认值超过10毫秒判断为慢查询,需要根据Redis并发量调整该值,对于高流量场景,如果命令执行时间在1毫秒以上,那么Redis最多可支撑OPS不到1000,因此对于高OPS场景,建议设置为1毫秒。

慢查询只记录命令执行时间,并不包括命令排队和网络传输时间。因此客户端执行命令的时间会大于实际命令执行时间。因为命令执行排队机制,慢查询会导致其他命令级联阻塞,因此客户端出现请求超时,需要检查该时间点是都有对应的慢查询,从而分析出是否为慢查询导致的命令级联阻塞。

可能会丢失部分慢查询命令数据。为了防止其丢失,可以定期执行slow get命令将慢查询日志持久化到其他存储中,然后制作可视化界面进行查询。

本文作者:whitebear

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!