首頁 > 軟體

redis慢查詢紀錄檔的存取和管理方式

2022-12-23 14:01:29

redis慢查詢紀錄檔的存取和管理

通過一組命令來實現對慢查詢紀錄檔的存取和管理

(1)獲取慢查詢紀錄檔

命令:slowlog get

127.0.0.1:6379> slowlog get
1) 1) (integer) 1
   2) (integer) 1513709400
   3) (integer) 11
   4) 1) "slowlog"
      2) "get"
2) 1) (integer) 0
   2) (integer) 1513709398
   3) (integer) 4
   4) 1) "config"
      2) "set"
      3) "slowlog-log-slower-than"
      4) "2"

(2)獲取慢查詢紀錄檔列表當前的長度

命令:slowlog len

127.0.0.1:6379> slowlog len
(integer) 2

(3)慢查詢紀錄檔重置

命令:slowlog reset

實際是對慢查詢紀錄檔列表做清理操作。

127.0.0.1:6379> slowlog len
(integer) 6
127.0.0.1:6379> slowlog reset
OK
127.0.0.1:6379> slowlog len
(integer) 1
#為什麼還有1個,因為閾值設的比較小,slowlog reset就屬於慢查詢

注意事項

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

(1)slowlog-max-len設定建議:線上建議調大慢查詢列表,記錄慢查詢時Redis會對長命令做截斷操作,並不會佔用大量記憶體。

增大慢查詢列表可以減緩慢查詢被剔除的可能。

(2)slowlog-log-slower-than設定建議:預設值超過10毫秒判定為慢查詢,需要根據Redis並行量調整該值。

由於Redis採用單執行緒響應命令,對於高流量的場景,如果命令執行時間在1毫秒以上,那麼Redis最多可以支撐OPS不到1000,因此對於高OPS的場景的Redis建議設定1毫秒。

(3)慢查詢只記錄命令執行時間,並不包括命令排隊和網路傳輸時間。因此使用者端執行命令的時間會大於命令實際執行的時間。

因為命令執行排隊機制,慢查詢會導致其他命令級聯阻塞,因此當用戶端出現請求超時,

需要檢查該時間點是否有對應的慢查詢,從而分析出是否為慢查詢導致的命令級聯阻塞。

(4)由於慢查詢紀錄檔是一個先進先出的佇列,也就是說如果慢查詢比較多的情況下,可能會丟失部分慢查詢命令,

為了防止這種情況發生,可以定期執行slowlog get命令將慢查詢紀錄檔持久化到其他儲存中(例如,MySQL),

然後可以製作出視覺化介面進行查詢。

Redis慢查詢總結

慢查詢分析

1、什麼叫慢查詢?

類似於mysql中的慢查詢語句,當查詢語句的執行時間超過設定的時間閾值就是慢查詢語句,會放入慢查詢紀錄檔中。

redis中慢查詢只統計命令生命週期中執行命令的時間,所有沒有慢查詢並不代表使用者端沒有超時的問題。(使用者端命令生命週期:傳送命令,命令排隊,命令執行,命令返回)。

2、慢查詢的設定引數

redis提供了slowlog-log-slower-than和slowlog-max-len設定慢查詢。

1)使用slowlog-log-slower-than來設定執行時間的閾值,預設是 10000微妙;

備註:slowlog-log-slower-than=0記錄所有的命令,slowlog-log-slower-than<0對任何命令都不進行記錄。

2)slowlog-max-len只是說明了慢查詢紀錄檔最多儲存多少條,實際上慢查詢命令儲存在列表上,slowlog-max-len就是這個列表的最大長度。當命令超過最大列表長度,按照先進先出演演算法,最早進入對了的移除。

設定方式:可以通過組態檔設定:

也可以通過命令列使用者端傳送 config set命令動態修改: 

config set slowlog-log-slower-than 20000

config set slowlog-max-len 1000

config rewrite(用來把設定的值持久化到本地組態檔中,啟動時需指定組態檔,否則持久化失敗)

3、慢查詢紀錄檔的存取和管理

  • slowlog get獲取的紀錄檔分4個屬性:id,發生時間戳,執行時間,執行命令+引數
  • slowlog reset 用於重置慢查詢紀錄檔儲存列表,就是情況列表中的資料。

注意事項:由於慢查詢是一個先進先出的佇列,可能會丟失部分慢查詢命令,因此線上最好設定在1000以上,同時可以定期執行slowlog get 命令將慢查詢紀錄檔持久化到其他儲存中(比如Mysql)。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com