跳至主要內容

2.14 慢查询 🎉

刘春龙...大约 2 分钟数据库redis

2.14 慢查询 🎉

慢查询,顾名思义就是比较慢的查询,但是究竟是哪里慢呢?

Redis命令执行的整个过程

  • 慢查询发生在第3阶段
  • 客户端超时不一定慢查询,但慢查询是客户端超时的一个可能因素
  • 慢查询日志是存放在Redis内存列表中。

慢查询日志是Redis服务端在命令执行前后计算每条命令的执行时长,当超过某个阈值是记录下来的日志。日志中记录了慢查询发生的时间,还有执行时长、具体什么命令等信息,它可以用来帮助开发和运维人员定位系统中存在的慢查询。

可以使用slowlog get命令获取慢查询日志,在slowlog get后面还可以加一个数字,用于指定获取慢查询日志的条数,比如,获取3条慢查询日志:

SLOWLOG get 3

参数

  • 唯一标识ID
  • 命令执行的时间戳
  • 命令执行时长
  • 执行的命名和参数

如何获取慢查询日志的长度

可以使用slowlog len命令获取慢查询日志的长度。

slowlog len

如何进行配置 💎

查看redis慢日志配置,登陆redis服务器,使用redis-cli客户端连接redis server

config get slow*

提示

10000阈值,单位微秒,此处为10毫秒,128慢日志记录保存数量的阈值,此处保存128条。

修改Redis配置文件

比如,把slowlog-log-slower-than设置为1000,slowlog-max-len设置为1200:

slowlog-log-slower-than 1000
slowlog-max-len 1200

使用config set命令动态修改。

比如,还是把slowlog-log-slower-than设置为1000,slowlog-max-len设置为1200:

config set slowlog-log-slower-than 1000
config set slowlog-max-len 1200
config rewrite

实践建议

  • slowlog-max-len配置建议
    • 线上建议调大慢查询列表,记录慢查询时Redis会对长命令做截断操作,并不会占用大量内存。
    • 增大慢查询列表可以减缓慢查询被剔除的可能,例如线上可设置为1000以上。
  • slowlog-log-slower-than配置建议
    • 默认值超过10毫秒判定为慢查询,需要根据Redis并发量调整该值。
    • 由于Redis采用单线程响应命令,对于高流量的场景,如果命令执行时间在1毫秒以上,那么Redis最多可支撑OPS不到1000。因此对于高OPS场景的Redis建议设置为1毫秒。
上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7