Redis记录慢查询日志功能

一、什么是 slow log

Slow log 是 Redis 用来记录查询执行时间的日志系统。
查询执行时间指的是不包括像客户端响应(talking)、发送回复等 IO 操作,而单单是执行一个查询命令所耗费的时间。
另外,slow log 保存在 内存 里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启 slow log 而损害 Redis 的速度

二、设置 slowlog
Slow log 的行为由两个配置参数(configuration parameter)指定,可以通过改写 redis.conf 文件或者用 config get 和 config get 命令对它们动态地进行修改。
1、第一个选项是 slowlog-log-slower-than

作用:决定要对执行时间大于多少微秒(microsecond,1秒 = 1,000,000 微秒)的查询进行记录。
比如执行以下命令将让 slow log 记录所有查询时间大于等于 100 微秒的查询:
CONFIG SET slowlog-log-slower-than 100
而以下命令记录所有查询时间大于 1000 微秒的查询:
CONFIG SET slowlog-log-slower-than 1000

2、另一个选项是 slowlog-max-len

作用:决定 slow log 最多能保存多少条日志, slow log 本身是一个 FIFO 队列,当队列大小超过 slowlog-max-len 时,最旧的一条日志将被删除,而最新的一条日志加入到 slow log ,以此类推。
也就是 如果服务器 slowlog-max-len 的值为 100 , 并且假设服务器已经储存了 100 条慢查询日志, 那么如果服务器打算添加一条新日志的话, 它就必须先删除目前保存的最旧的那条日志, 然后再添加新日志。

3、使用 config get/set 命令可以查询/设置两个选项的当前值

redis> config get slowlog-log-slower-than
1) "slowlog-log-slower-than"
2) "1000"
redis> config set slowlog-log-slower-than 0
OK

redis> config get slowlog-max-len
1) "slowlog-max-len"
2) "128" 
redis> config set slowlog-max-len 5
OK

三、查看 slow log
查看 slow log ,可以使用 slowlog get 或者 slowlog get number 命令,前者打印所有 slow log ,最大长度取决于 slowlog-max-len 选项的值,而 slowlog get number 则只打印指定数量的日志。

#用客户端发送几条命令请求:
redis> SET msg "hello world"
OK
redis> SET number 10086
OK
redis> SET database "Redis"
OK

#使用 SLOWLOG GET 命令查看服务器所保存的慢查询日志:
redis> SLOWLOG GET
1) 1) (integer) 4               # 唯一性(unique)的日志标识符
   2) (integer) 1378781447      # 被记录命令的执行时间点,以 UNIX 时间戳格式表示
   3) (integer) 13              # 查询执行时间,以微秒为单位
   4) 1) "SET"                  # 命令以及命令参数
      2) "database"
      3) "Redis"
2) 1) (integer) 3
   2) (integer) 1378781439
   3) (integer) 10
   4) 1) "SET"
      2) "number"
      3) "10086"
3) 1) (integer) 2
   2) (integer) 1378781436
   3) (integer) 18
   4) 1) "SET"
      2) "msg"
      3) "hello world"
4) 1) (integer) 1
   2) (integer) 1378781425
   3) (integer) 11
   4) 1) "CONFIG"
   2) "SET"
   3) "slowlog-max-len"
   4) "5"
5) 1) (integer) 0
   2) (integer) 1378781415
   3) (integer) 53
   4) 1) "CONFIG"
      2) "SET"
      3) "slowlog-log-slower-than"
      4) "0"

备注:

日志的唯一 id 只有在 Redis 服务器重启的时候才会重置,这样可以避免对日志的重复处理(比如你可能会想在每次发现新的慢查询时发邮件通知你)。

如果这时再执行一条 SLOWLOG GET 命令, 那么我们将看到, 上一次执行的 SLOWLOG GET 命令已经被记录到了慢查询日志中, 而最旧的、编号为 0 的慢查询日志已经被删除, 服务器的慢查询日志数量仍然为 5 条

redis> SLOWLOG GET
1) 1) (integer) 5
   2) (integer) 1378781521
   3) (integer) 61
   4) 1) "SLOWLOG"
      2) "GET"
2) 1) (integer) 4
   2) (integer) 1378781447
   3) (integer) 13
   4) 1) "SET"
      2) "database"
      3) "Redis"
3) 1) (integer) 3
   2) (integer) 1378781439
   3) (integer) 10
   4) 1) "SET"
      2) "number"
      3) "10086"
4) 1) (integer) 2
   2) (integer) 1378781436
   3) (integer) 18
   4) 1) "SET"
      2) "msg"
      3) "hello world"
5) 1) (integer) 1
   2) (integer) 1378781425
   3) (integer) 11
   4) 1) "CONFIG"
   2) "SET"
   3) "slowlog-max-len"
   4) "5"

四、查看当前日志的数量
使用命令 slowlog len 可以查看当前日志的数量。
请注意这个值和 slower-max-len 的区别,它们一个是当前日志的数量,一个是允许记录的最大日志的数量。

redis> slowlog len
(integer) 5

五、清空日志
使用命令 slowlog RESET 可以清空 slow log 。

redis> slowlog len
(integer) 14 
redis> slowlog reset
OK 
redis> slowlog len
(integer) 0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值