目錄
Redis 慢查詢日志概述
慢查詢日志的兩個配置項
讀取慢日志記錄
日志輸出格式
查詢慢日志記錄長度
重置慢日志
SLOWLOG 是用來讀取和重置 Redis 慢查詢日志的指令,Redis 2.2.12 版本開始支援
Redis 慢查詢日志概述
用戶端從發送指令到擷取傳回結果經過了以下幾個步驟:
1. 用戶端發送指令
2. 該指令進入 Redis 隊列排隊等待執行
3. Redis 開始執行指令 - Redis 指令執行完成
4. 指令執行結果傳回給用戶端
Redis 慢查詢日志統計的時間,隻包含第三步的 Redis 指令從開始執行到執行完成的時間。
(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 操作也會被記錄到慢查詢日志中。