天天看點

Redis 慢查詢日志指令 「SLOWLOG」

目錄

Redis 慢查詢日志概述

慢查詢日志的兩個配置項

讀取慢日志記錄

日志輸出格式

查詢慢日志記錄長度

重置慢日志

SLOWLOG 是用來讀取和重置 Redis 慢查詢日志的指令,Redis 2.2.12 版本開始支援

Redis 慢查詢日志概述

用戶端從發送指令到擷取傳回結果經過了以下幾個步驟:

1. 用戶端發送指令

2. 該指令進入 Redis 隊列排隊等待執行

3. Redis 開始執行指令  -  Redis 指令執行完成 

4. 指令執行結果傳回給用戶端

Redis 慢查詢日志統計的時間,隻包含第三步的 Redis 指令從開始執行到執行完成的時間。

Redis 慢查詢日志指令 「SLOWLOG」

(Redis 6.0 版本前是單線程,6.0 開始支援多線程,預設是禁用狀态)

慢查詢日志的兩個配置項

slowlog-log-slower-than

  • Redis 慢查詢日志的時間門檻值,機關微妙。
  • 1) 值為正數,執行時間大于該值設定的微秒時才記錄到慢日志中。預設 10000 微秒。
  • 2) 值為負數,禁用慢查詢日志。
  • 3) 值為 0,所有指令都記錄到慢日志中

slowlog-max-len

  • 慢查詢日志長度,最小值為零。預設 128
  • 當記錄新指令并且目前慢日志已達到最大長度時,最舊的一條記錄将被删除。

可以通過編輯 redis.conf 或者使用 CONFIG GET/SET 指令來進行配置

127.0.0.1:6379> config get slowlog-log-slower-than
1) "slowlog-log-slower-than"
2) "10000"
127.0.0.1:6379> config get slowlog-max-len
1) "slowlog-max-len"
2) "128"
           
127.0.0.1:6379> config set slowlog-log-slower-than 0
OK
127.0.0.1:6379> config set slowlog-max-len 10
OK
           

讀取慢日志記錄

慢查詢日志是記錄在記憶體中的,記錄速度非常快。

可以使用 SLOWLOG GET N 指令來讀取慢日志,查詢最近的 N 條記錄。

該指令預設請求條數為 10 ,即 SLOWLOG GET 等價于 SLOWLOG GET 10

參數為 -1 時會擷取整個慢日志資訊。

日志輸出格式

127.0.0.1:6379> slowlog get 2
1) 1) (integer) 13
   2) (integer) 1629523068
   3) (integer) 6
   4) 1) "get"
      2) "a"
   5) "127.0.0.1:43942"
   6) "lnrcoder"
2) 1) (integer) 12
   2) (integer) 1629523065
   3) (integer) 3
   4) 1) "client"
      2) "setname"
      3) "lnrcoder"
   5) "127.0.0.1:43942"
   6) "lnrcoder"
           

1)每條日志唯一辨別符

2)指令執行時的時間戳

3)指令執行消耗的時間,機關微秒

4)執行的指令數組

5)用戶端位址和端口 (僅 4.0 以上版本支援)

6)用戶端名稱 (僅 4.0 以上版本支援,預設名稱為空,需要通過 client setname 指令進行設定)

查詢慢日志記錄長度

使用 SLOWLOG LEN 可以擷取慢日志記錄的長度。

127.0.0.1:6379> slowlog len
(integer) 2
           

重置慢日志

使用 SLOWLOG RESET 指令用來重置慢日志。使用該指令進行日志重置後,資訊将永遠丢失。

127.0.0.1:6379> slowlog len
(integer) 10
127.0.0.1:6379> slowlog reset
OK
127.0.0.1:6379> slowlog len
(integer) 1
127.0.0.1:6379> slowlog get
1) 1) (integer) 23
   2) (integer) 1629523576
   3) (integer) 2
   4) 1) "slowlog"
      2) "len"
   5) "127.0.0.1:43942"
   6) "lnrcoder"
2) 1) (integer) 22
   2) (integer) 1629523572
   3) (integer) 3
   4) 1) "slowlog"
      2) "reset"
   5) "127.0.0.1:43942"
   6) "lnrcoder"
           

因為我們 slowlog-log-slower-than 設定的 0 ,是以 slowlog reset 操作也會被記錄到慢查詢日志中。