簡介
慢日志(Slow log) 是 Redis 用來記錄命令執行時間的日志系統。例如線上Redis突然出現堵塞,使用該命令可以查詢Redis服務器耗時的命令列表,快速定位問題。
由於慢日志是存儲於內存的,讀寫速度非常快,不用擔心因為使用慢日志而造成性能問題。
可用版本: >= 2.2.12
時間復雜度: O(1)
如何配置
2種配置方法。第一種是修改redis.conf
配置文件,第二種則是使用CONFIG SET
動態修改。
需要配置的參數:
slowlog-log-slower-than
配置對執行時間大於多少微秒(microsecond, 1秒=10^6微秒) 的命令進行記錄。線上可以設置為1000微秒,也就是1毫秒。slowlog-max-len
設置最大考驗記錄多少條記錄。 slow log 本身是一個先進先出(FIFO) 隊列,當隊列大小超過該配置的值時,最舊的一條日志將被刪除。線上可以設置為1000以上。
示例:
CONFIG SET slowlog-log-slower-than 10000
CONFIG SET slowlog-max-len 128
查詢是否生效,可以使用CONFIG GET
命令:
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"
查詢慢日志
查詢很簡單,使用SLOWLOG GET
命令:
127.0.0.1:6379> SLOWLOG GET 2
1) 1) (integer) 207
2) (integer) 1582875104
3) (integer) 98977
4) 1) "SPOP"
2) "wt_pre_room_wxids"
2) 1) (integer) 206
2) (integer) 1582875103
3) (integer) 501649
4) 1) "SPOP"
2) "wt_bind_user_wxids"
該命令如果不給參數,則打印出所有慢查詢命令。
現在按結果集順序講解一下輸出的結果含義:
-
- 唯一性(unique)的日志標識符。日志的唯一 id 只有在 Redis 服務器重啟的時候才會重置,這樣可以避免對日志的重復處理。
-
- 被記錄命令的執行時間點,以 UNIX 時間戳格式表示
-
- 查詢執行時間,單位為微秒
-
- 執行的命令,以數組的形式排列
如果僅需要知道當前慢查詢的數量,則使用命令SLOWLOG LEN
即可:
127.0.0.1:6379> SLOWLOG LEN
(integer) 128
使用命令 SLOWLOG RESET
可以清空 慢日志 :
127.0.0.1:6379> SLOWLOG RESET
OK
提示:慢查詢較多的情況下,可能會丟失部分慢查詢命令,可以定期執行 SLOWLOG GET命令將慢查詢日志持久化到其他存儲(例如ES)中。然后制作可視化界面查詢。
參考
1、SLOWLOG subcommand [argument] — Redis 命令參考
http://redisdoc.com/debug/slowlog.html
2、Redis-慢查詢分析-布拉君君-51CTO博客
https://blog.51cto.com/5148737/1976757