《Redis開發與運維》慢查詢分析 讀書筆記


慢查詢日誌就是系統在命令執行前後計算每條命令的執行時間,當超過了設置的閥值,就將這條命令的信息(發生時間、耗時、命令詳細信息等)記錄下來。

客戶端命令執行生命週期

  Redis的客戶端分爲四個部分,如下圖所示:
在這裏插入圖片描述

  • 發送命令
  • 命令排隊
  • 命令執行
  • 返回結果

注意:慢查詢只統計命令執行時間,所以沒有慢查詢並不代表客戶端沒有超時問題。

慢查詢參數配置

  • slowlog-log-slower-than

  slowlog-log-slower-than 是預設閥值,單位微妙(默認10000),如果有一條命令的執行時間超過了 10000 微妙那麼這條命令將被記錄在慢查詢日誌中。
  提示:如果 slowlog-log-slower-than = 0 會記錄所有命令,如果 slowlog-log-slower-than < 0 任何命令都不會記錄。

  • slowlog-max-than

  slowlog-max-than 說明慢查詢日誌最多存儲多少條記錄,並沒有說明存儲在哪個位置?在 Redis 中使用了一個列表來存儲慢查詢日誌,slowlog-max-than 就是列表的最大長度。一個命令如果滿足慢查詢的條件,就會將這條命令插入到列表中。
  提示:當慢查詢日誌列表已處於最大長度時,最早插入的一個命令將從列表中移除。

  • 使用 config set 命令動態修改配置
### 修改閥值和設置列表最大長度
config set slowlog-log-slower-than 20000
config set slowlog-max-len 1000
### 將配置持久化到本地文件
config rewrite
  • 獲取慢查詢日誌
###  n 可以指定條數
slowlog get \[n\]
  • 慢查詢日誌數據結構
      每一個慢查詢日誌由 4 個屬性組成,分別是慢查詢日誌的標識 id、發生時間戳、命令耗時、執行命令和參數。如下圖所示:
    在這裏插入圖片描述

  • 獲取慢查詢日誌列表長度

slowlog len
  • 慢查詢日誌重置
slowlog reset

慢查詢使用建議

  • slowlog-max-len:線上調大慢查詢列表,記錄慢查詢時 Redis 會對長命令做截斷操作,並不會佔用大量內存。增大慢查詢列表可以減緩慢查詢被剔除的可能性。
  • slowlog-log-slower-than:建議超過10毫秒判定爲慢查詢,需要根據 Redis 併發量調整該值。對於高流量場景,如果命令執行在1毫秒以上,那麼 Redis 最多可支撐 OPS 不到1000。所以對於高 OPS 場景建議設置爲1毫秒。
  • 慢查詢只記錄命令時間,因此客戶端執行命令的時間會大於命令實際執行時間。因爲命令執行排隊機制,慢查詢會導致其它命令級聯阻塞,所以在出現請求超時情況下需要檢查該時間點會不會出現慢查詢,從而分析是否爲慢查詢導致的級聯阻塞。
  • 在慢查詢比較多的情況下,可能會丟失部分慢查詢命令,爲了防止丟失部分慢查詢命令可以定期執行 slow get 命令將慢查詢日誌持久化到其它存儲中(例如 MySQL),然後製作可視化界面進行查詢。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章