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

需要注意的是,慢查詢日志只是統計步驟3)執行命令的時間,所以慢查詢并不代表客戶端沒有超時問題,需要注意的是,慢查詢日志只是統計步驟3)執行命令的時間,所以慢查詢并不代表客戶端沒有超時問題,
一、慢查詢的配置引數:
- 慢查詢的預設閥值 slowlog-log-slower-than
slowlog-log-slower-than引數就是預設閥值,單位是微秒,默認值是10000,如果一條命令的執行時間超過10000微妙,那么它將被記錄在慢查詢日志中,
如果slowlog-log-slower-than的值是0,則會記錄所有命令,
如果slowlog-log-slower-than的值小于0,則任何命令都不會記錄日志,
- 慢查詢日志的長度slowlog-max-len
slowlog-max-len只是說明了慢查詢日志最多存盤多少條,Redis使用一個串列來存盤慢查詢日志,showlog-max-len就是串列的最大長度,當慢查詢日志已經到達串列的最大長度時,又有慢查詢日志要進入串列,則最早插入串列的日志將會被移出串列,新日志被插入串列的末尾,
二、慢查詢日志的組成
慢查詢日志由以下四個屬性組成:
標識ID,發生時間戳,命令耗時,執行命令和引數
三、慢查詢日志的訪問和管理
獲取慢查詢日志slowlog get [n]
命令:slowlog get [N]
選型:N,可選,代表獲取的日志條數
例如:showlog get 5
四、慢查詢日志最佳實踐
- slowlog-max-len的設定建議
線上環境建議調大慢查詢日志的串列,記錄慢查詢日志時Redis會對長命令做截斷操作,并不會占用大量記憶體,增大慢查詢串列可以級訓慢查詢被剔除出串列的可能性,例如線上可以設定為1000以上,
- slowlog-log-lower-than的設定建議
需要根據redis的并發量調整該值,由于redis采用單執行緒回應名利,對于高流量的場景,如果執行命令的時間在1毫秒以上,那么redis最多可支撐OPS(每秒操作次數)不到1000,因此高OPS場景的REDIS建議設定為1毫秒,
- 慢查詢只記錄命令執行時間,并不包括命令排隊時間和網路傳輸時間,
因此客戶端命令的執行時間要大于redis服務器實際執行命令的時間,因為命令執行排隊極致,慢查詢會導致命令級聯阻塞,因此當客戶端出現請求超時,需要檢查該時間點是否有對應的慢查詢,從而分析是否因為慢查詢導致的命令級聯阻塞
- 慢查詢日志是一個先進先出佇列
慢查詢較多的情況下,可能會丟失部分慢查詢命令,可以定期執行slow get命令將慢查詢日志持久化到其他存盤中,然后制作可視化界面查詢,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/1132.html
標籤:NoSQL
上一篇:Docker 安裝 Redis(指定組態檔方式啟動)
下一篇:Mongodb版本升級
