慢查询日志帮助开发人员定位系统存在的慢操作,慢查询就是系统在命令执行前后计算的每条命令的执行时间,当超过预设阈值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来,Redis提供类似的功能
客户端请求的四个执行步骤
1.发送命令——2.排队等待执行——3.执行命令——4.返回结果
慢查询只统计步骤3执行命令的这一步,所以没有慢查询并不等于客户端没有超时的情况
慢查询的配置参数
在redis.conf配置文件中有两个配置项:slowlog-log-slower-than和slowlog-max-len
slowlog-log-slower-than表示预设的阈值,默认为10000微秒(1秒=1000毫秒=1000000微秒),如果一条命令执行时间超过了10000微秒就会被记录放在慢查询日志中
如果slowlog-log-slower-than设置为0就会记录所有的命令,设置为小于0就不会记录任何的命令
slowlog-max-len:Redis使用了一个列表来存储慢查询日志,此配置就是这个列表的最大长度,默认为128条,如果记录多于128条会删除最先插入的数据
如果想要修改配置可以直接在redis客户端进行修改,以slowlog-max-len为例
127.0.0.1:6379> config set slowlog-max-len 512
OK
127.0.0.1:6379> config rewrite
OK
在查看配置文件,发现slowlog-max-len配置已经修改为512了
获取慢查询日志
虽然慢查询日志是存放在Redis内存列表中的,但是Redis并没有暴露这个列表的键,而是通过一组命令来实现对慢查询日志的访问和管理。
slowlog get [n]
查询两条慢查询记录,此处的[n]为选填项,如果不填查询所有,如果填就是查询指定的条数
127.0.0.1:6379> slowlog get "2"
1) 1) (integer) 12
2) (integer) 1552899968
3) (integer) 1000502
4) 1) "migrate"
2) "127.0.0.1"
3) "6379"
4) "a"
5) "1"
6) "1000"
7) "copy"
5) "127.0.0.1:35730"
6) ""
2) 1) (integer) 11
2) (integer) 1552899943
3) (integer) 1000909
4) 1) "migrate"
2) "127.0.0.1"
3) "6379"
4) "a"
5) "0"
6) "1000"
7) "copy"
5) "127.0.0.1:35730"
6) ""
四个主要参数
- 慢查询日志的标识id
- 发生时间戳
- 命令耗时
- 执行命令和参数
获取慢查询列表长度
slowlog len
当前有13条慢查询
127.0.0.1:6379> slowlog len
(integer) 13
清除慢查询列表
slowlog reset
清除当前慢查询列表
127.0.0.1:6379> slowlog len
(integer) 13
127.0.0.1:6379> slowlog reset
OK
127.0.0.1:6379> slowlog len
(integer) 0