慢查询是什么?
内部执行时间超过某个指定时限的查询,就叫做慢查询。
指定时限如何设置
Redis配置文件中有如下两个字段:
slowlog-log-slower-than:该配置项单位是微秒,默认是10000微秒,也就是10毫秒,执行时间超过该时间的命令就是慢查询,不过慢查询只记录命令的执行时间,并不包括命令排队和网络传输时间,所以实际的命令执行时间只会大于等于慢查询时间,然后将这些慢查询加入到日志文件中。
slowlog-max-len:设置日志的最大数量,默认是128条,服务器使用先进先出的方式来保存慢查询日志,一旦慢查询日志达到了指定上限值,那么当有新的日志进来时,最旧的慢日志就会先被删除。所以建议把慢日志数量调大,例如1000,然后最好定期持久化慢日志,防止旧数据被新数据覆盖。
操作示例
由于修改配置文件后还要重启服务才能生效,所以建议使用动态配置的方式来修改慢查询的配置项,先了解以下几个命令:
config set slowlog-log-slower-than xxx:设置慢查询时间
config set slowlog-max-len xxx:设置最大慢日志数量
config rewrite:把修改的配置持久化到配置文件中
slowlog get[n]:获取慢查询队列
slowlog len:获取慢查询队列的长度
slowlog reset:清空慢查询队列
把慢查询时间指定为0微秒,保存redis执行的所有的命令,如下:
输入几个命令,如下:
通过 slowlog get
查看慢日志,结果如下:
拿其中一个来解释下每行代表的意思:
第一行:日志的唯一标识符
第二行:命令执行时的UNIX时间戳
第三行:命令的执行时长,单位是微秒
第四行:命令以及命令的参数,以数组的形式排列
通过slowlog len
来获取慢查询队列的长度,如下:
通过slowlog reset
清空慢查询队列,如下:
此时慢查询队列中还会有一条日志,该日志记录的就是slowlog reset命令。