Redis慢查询

在MySQL中,我们是可以开启慢查询日志功能,记录所有执行超过 long_query_time 参数设定的时间阈值的SQL语句的日志,为SQL语句的优化带来很好的帮助。可见MySQL慢查询


同样的在Redis中,其命令的命令生命周期:发送、排队、执行、返回。其中慢查询只统计第3个执行步骤的时间
们,执行时间超过阀值,会将发生时间、耗时、命令记录等。
Redis慢查询


Redis设置慢查询共有两种方式,如下:

  • redis.conf修改
    找到slowlog-log-slower-than 10000 ,修改保存即可(单位微秒)
    注意:slowlog-log-slower-than 0 表示记录所有命令,为 -1表示命令都不记录
    Redis慢查询

  • 动态设置
    config set slowlog-log-slower-than 10000     //10毫秒(单位微秒)
    使用config set完后,这里和MySQL中动态修改数据库配置是一样的,如果将服务重启,那么就会失效。
    如果将配置持久化保存到redis.conf,可以执行config rewrite



另外在上述截图中,我们还可以看到一个配置参数—— slowlog-max-len ,因为Redis的慢查询记录也是存在队列里的,slow-max-len 是用于设置存放的记录最大条数。

比如设置的slow-max-len 10,当有第11条慢查询命令插入时,队列的第一条命令就会出列,第11条入列到慢查询队列中, 可以config set动态设置,也可以修改redis.conf完成配置。




慢查询命令

  • 获取队列里慢查询的命令:slowlog get
  • 获取慢查询列表当前的长度:slowlog len
  • 对慢查询列表清理(重置):slowlog reset

Redis慢查询


  • 对于线上slowlog-log-slower-than配置的建议: 默认为10毫秒,根据redis并发量来调整,对于高并发比建议为1毫秒

  • 对于线上slow-max-len配置的建议: 线上可加大slow-max-len的值,记录慢查询存长命令时redis会做截断,不会占用大量内存,线上可设置1000以上


慢查询是先进先出的队列,访问日志记录出列会存在丢失,需定期执行slow get,将结果存储到其它设备中(如mysql)