Redis慢查询
在MySQL中,我们是可以开启慢查询日志功能,记录所有执行超过 long_query_time
参数设定的时间阈值的SQL语句的日志,为SQL语句的优化带来很好的帮助。可见MySQL慢查询
同样的在Redis中,其命令的命令生命周期:发送、排队、执行、返回。其中慢查询只统计第3个执行步骤的时间
们,执行时间超过阀值,会将发生时间、耗时、命令记录等。
Redis设置慢查询共有两种方式,如下:
-
redis.conf修改
找到slowlog-log-slower-than 10000 ,修改保存即可(单位微秒)
注意:slowlog-log-slower-than 0 表示记录所有命令,为 -1表示命令都不记录 -
动态设置
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
-
对于线上slowlog-log-slower-than配置的建议: 默认为10毫秒,根据redis并发量来调整,对于高并发比建议为1毫秒
-
对于线上slow-max-len配置的建议: 线上可加大
slow-max-len
的值,记录慢查询存长命令时redis会做截断,不会占用大量内存,线上可设置1000以上
慢查询是先进先出的队列,访问日志记录出列会存在丢失,需定期执行slow get,将结果存储到其它设备中(如mysql)