Redis 慢查詢

Federico發表於2017-12-16

Redis 慢查詢

  許多儲存系統提供慢查詢日誌幫助開發和運維人員定位系統的慢操作。慢查詢日誌就是系統在命令執行前後計算每條命令的執行時間,當超過預設閾值就將這條命令的相關資訊記錄下來Redis提供了相關的功能。

慢查詢的兩個配置引數

  • slowlog-log-slower-than
  • slowlog-max-len

  slowlog-log-slower-than:設定閾值,他的單位是微秒(1秒=1000毫秒=1000000微秒),預設值是10000,超過閾值的命令都將被記錄到慢查詢日誌中。
  slowlog-max-len:設定慢查詢日誌儲存多少條,Redis的慢查詢日誌存放在Redis記憶體列表中。

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-log-slower-than設定為預設設定10000,slowlog-man-len:慢查詢日誌儲存128條,我們可以通過下面的命令進行修改。

127.0.0.1:6379> CONFIG SET slowlog-log-slower-than 20000
OK
127.0.0.1:6379> CONFIG SET slowlog-max-len 1024
OK
127.0.0.1:6379> CONFIG REWRITE
OK

  config rewrite:將配置持續化到本地配置檔案當中

操作慢查詢日誌

檢視慢查詢日誌:

127.0.0.1:6379> SLOWLOG get
 1) 1) (integer) 1445
    2) (integer) 1513035341
    3) (integer) 11808
    4) 1) "HINCRBY"
       2) "unread:8b774689b7df45cda7cc735bcedd51/mobile"
       3) "2c9120d199304e9081314916ec4836bf"
       4) "1"

慢查詢日誌由4個屬性組成

  • 慢查詢日誌的標識id
  • 發生時間戳
  • 命令耗時
  • 執行命令和引數

獲取慢查詢日誌列表當前長度
slowlog len

慢查詢日誌重置(對列表做清理操作)
slowlog reset

友情提示
  慢查詢功能可以有效地幫助我們找到Redis可能存在的瓶頸,但在實際使用過程中要注意一下幾點:

  • slowlog-max-len:線上建議調大慢查詢列表,記錄慢查詢時Redis會對長命令做截斷操作,並不會佔用大量記憶體。
  • slowlog-log-slower-than:預設值超過10毫秒判定為慢查詢,需要根據Redis併發量調整該值。由於Redis採用單執行緒相應命令,對於高流量的場景如果命令執行在1毫秒以上,那麼Redis最多可支撐OPS不到1000,因此對於高OPS場景的Redis建議設定為1毫秒。OPS(每秒對Redis的持久化操作)
  • 慢查詢日誌只記錄命令執行的時間,並不包括命令排隊和網路傳輸時間。因此客戶端執行命令的時間會大於命令實際執行時間。因為命令執行排隊機制,慢查詢會導致其他命令級聯阻塞,因此當客戶端出現請求超時時,需要檢查該時間點是否有對應的慢查詢,從而分析出是否為慢查詢導致的命令級聯阻塞。
  • 由於慢查詢日誌是一個先進先出的佇列,也就是說如果慢查詢比較多的情況下,可能會丟失部分慢查詢命令,為了防止這種情況發生,可以定期執行slow get命令將慢查詢日誌持久化到其他儲存中,然後可以只作為視覺化介面進行查詢。

相關文章