天天看點

Redis系列八、Redis慢查詢分析

慢查詢日志幫助開發和運維人員定位系統存在的慢操作。慢查詢日志就是系統在指令執行前後計算每條指令的執行時間,當超過預設閥值,就将這條指令的相關資訊(慢查詢ID,發生時間戳,耗時,指令的詳細資訊)記錄下來。Redis用戶端一條指令分為如下四部分執行:

Redis系列八、Redis慢查詢分析

其中慢查詢隻統計第3個執行步驟的時間。

1、慢查詢的兩個配置參數

slowlog-log-slower-than:

預設閥值,它的機關是微秒(1秒=1000毫秒,1毫秒=1000微秒),預設值是10000,假如執行了一個“很慢”的指令,如 “keys * ”;如果它超過了10000微秒,那麼它将會被記錄在慢查詢日志裡。

預設閥值的兩種方式:預設為10毫秒

a、動态設定

6379:> config set slowlog-log-slower-than 10000  //10毫秒10000微秒
           

使用config set完後,若想将配置持久化儲存到redis.conf,要執行config rewrite

b、redis.conf修改:找到slowlog-log-slower-than 10000 ,修改儲存即可

注意: 如果 slowlog-log-slower-than=0 會記錄所有的指令;

如果 slowlog-log-slower-than<0對于任何指令都不會進行記錄。

slowlog-max-len:

慢查詢日志最多存儲的條數。Redis使用一個清單來存儲慢查詢日志,slowlog-max-len就是清單的最大長度,當清單已經處于最大長度時,繼續新增一個慢查詢日志時,會将最早插入的一個指令從清單中移除。

設定方式和slowlog-log-slower-than一樣,可以config set動态設定,也可以修改redis.conf完成配置。

2、相關指令

擷取隊列裡慢查詢的指令:

slowlog get

查詢傳回的結構如下:

Redis系列八、Redis慢查詢分析

擷取慢查詢清單目前的長度:

slowlog len //以上隻有1條慢查詢,傳回1

對慢查詢清單清理(重置):

slowlog reset //再查slowlog len 此時傳回0 清空

3、配置建議

對于線上slow-max-len配置的建議:線上可加大slow-max-len的值,記錄慢查詢存長指令時redis會做截斷,不會占用大量記憶體,線上可設定1000以上

對于線上slowlog-log-slower-than配置的建議:預設為10毫秒,根據redis并發量來調整,對于高并發比建議為1毫秒

注意:

1,慢查詢隻記錄指令在redis的執行時間,不包括排隊、網絡傳輸時間

2,慢查詢是先進先出的隊列,通路日志記錄出列丢失,需定期執行slow get,将結果存儲到其它裝置中(如mysql)