Slow LOG In Redis

SLOWLOG 记录了 Redis 运行时间超时特定阀值的命令。这类慢查询命令被保存在 Redis 服务器的一个定长队列中,最多保存 slowlog-max-len(默认128)个慢查询命令。当慢查询命令达到128个时,新产生的慢查询被加入前,会从队列中删除最旧的慢查询命令。

配置

redis slowlog通过2个参数配置管理,默认命令耗时超过10毫秒,就会被记录到慢查询日志队列中;队列默认保存最近产生的128个慢查询命令。

  • slowlog-log-slower-than: 慢查询阀值,单位微秒,默认100000 (10毫秒); 执行耗时超过这个值的查询会被记录;建议你生产环境设置为 10000(1毫秒),因为如果命令都是 1 毫秒以上,那么 Redis 吞吐率只有 1000 QPS;

  • slowlog-max-len: 慢查询存储的最大个数,默认128;生产设置设置大于1024,因为 slowlog 会省略过多的参数,慢查询不会占用过多的内存;

读取

返回最新的 2 条慢查询

SLOWLOG GET 2

1) 1) (integer) 9495
   2) (integer) 1638760173
   3) (integer) 13923
   4) 1) "COMMAND"
   5) "10.30.107.152:41830"
   6) ""
2) 1) (integer) 9494
   2) (integer) 1638759729
   3) (integer) 17170
   4) 1) "SADD"
      2) "nc_oauth:uname_to_access:nc:vpengcheng"
      3) "\xac\xed\x00\x05sr\x00Corg.springframework.security.oauth2.common.DefaultOAuth2AccessToken\x0c\xb2\x9e6\x1b$\xfa\xce\x02\x00\x06L\x00\x15additionalInformationt\x00\x0fLjava/util/Map;... (9974 more bytes)"
   5) "10.30.107.149:42132"
   6) ""

返回数据关键字段含义如下:

1) 1) (integer) 9495          
   2) (integer) 1638760173 # 表示查询执行时的 Unix 时间戳
   3) (integer) 13923      # 表示查询执行微秒数
   4) 1) "COMMAND"         # 表示查询的命令和参数
   5) "10.30.107.152:41830"
   6) ""