慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息记录下来。
Redis客户端执行一条命令分为如下4个部分:
1.发送命令
2.命令排队
3.执行命令
4.返回结果
注意:慢查询只统计步骤3的时间,慢查询并不代表客户端不存在超时问题
Redis Config命令
config get ${configName}
config set ${configName} ${configValue}
config reWrite
get命令是设置config属性的值;config get * 可以获取redis的所有配置信息。
set命令是设置config属性的值;
config reWrite 命令,对启动 Redis 服务器时所指定的 redis.conf 文件进行改写;
Redis慢分析查询配置
config set slowlog-log-slower-than 20000
config set slowlog-max-len 1000
config rewrite
slowlog-log-slower-than就是那个预设阀值, 它的单位是微秒(1秒=1000毫秒=1000000微秒),默认值是10000,假如执 行了一条“很慢”的命令(例如keys*),如果它的执行时间超过了10000微
秒,那么它将被记录在慢查询日志中。
slowlog-max-len 只是说明了慢查询日志最多存储多少 条,并没有说明存放在哪里?实际上Redis使用了一个列表来存储慢查询日 志,slowlog-max-len就是列表的最大长度。
但超出这个最大长度后,新的慢查询的日志会覆盖掉列表中最早插入的慢查询日志。
127.0.0.1:6379> config get slowlog*
1) "slowlog-log-slower-than"
2) "10000"
3) "slowlog-max-len"
4) "128"
Redis性能分析
#慢查询日志列表长度
slowlog len
# N从1开始,N选项非必填,不选则展示整个慢查询日志列表
slowlog get [N]
#重置慢查询日志列表,重置后,慢查询日志列表长度为0
slowlog reset
slowlog len查看当前日志的数量。
127.0.0.1:6379> slowlog len
(integer) 3
slowlog get [N] 查看日志信息信息,slowlog get命令获取所有日志信息,slowlog get 1 命令获取第一条日志信息
127.0.0.1:6379> slowlog get 1
1) 1) (integer) 2 # 唯一性(unique)的日志标识符
2) (integer) 1683595718 # 被记录命令的执行时间点,以 UNIX 时间戳格式表示
3) (integer) 73748 # 命令执行时间,以微秒为单位
4) 1) "COMMAND" # 执行的命令是什么
5) "127.0.0.1:57226"
6) ""
127.0.0.1:6379> slowlog get
1) 1) (integer) 2
2) (integer) 1683595718
3) (integer) 73748
4) 1) "COMMAND"
5) "127.0.0.1:57226"
6) ""
2) 1) (integer) 1
2) (integer) 1683530755
3) (integer) 304920
4) 1) "set"
2) "hello"
3) "world"
5) "127.0.0.1:62004"
6) ""
3) 1) (integer) 0
2) (integer) 1683529464
3) (integer) 325846
4) 1) "type"
2) "mylist"
5) "127.0.0.1:62004"
6) ""
slowlog reset 清空日志
127.0.0.1:6379> slowlog reset
OK
127.0.0.1:6379> slowlog len
(integer) 0
知识联想:Oracle SQL执行的慢分析