如何分析redis中的慢查詢

慢查詢的兩個參數配置

慢查詢只記錄命令執行時間,並不包括命令排隊和網絡傳輸時間。所以客戶端執行命令的時間會大於命令實際執行時間。由於命令執行排隊機制,慢查詢會致使其餘命令級聯阻塞,所以當客戶端出現請求超時,須要檢查該時間點是否有對應的慢查詢,從而分析出是否爲慢查詢致使的命令級聯阻塞網絡

Redis提供了slowlog-log-slower-than和slowlog-max-len配置來解決這兩個問題日誌

  • slowlog-log-slower-than:慢查詢預約閥值,單位是微秒,默認值是10000,若是一條命令的執行時間超過了10000微秒,那麼他將被記錄在慢查詢日誌中

若是slowlog-log-slower-than=0會記錄全部的命令,slowlog-log-slower-than<0對於任何命令都不會進行記錄code

  • slowlog-max-len:Redis使用了一個列表來存儲慢查詢日誌,slowlog-max-len就是列表的最大長度,一個新的命令知足慢查詢條件時被插入到這個列表中,當慢查詢日誌列表已處於其最大長度時,最先插入的一個命令將從列表中移出

在Redis中有兩種修改配置的方法,一種是修改配置文件,另外一種是使175用config set命令動態修改。例以下面使用config set命令將slowlog-log-slower-than設置爲20000微秒,slowlog-max-len設置爲1000隊列

config set slowlog-log-slower-than 20000
config set slowlog-max-len 1000
config rewrite

若是要Redis將配置持久化到本地配置文件,須要執行config rewrite命令內存

雖然慢查詢日誌是存放在Redis內存列表中的,可是Redis並無暴露這個列表的鍵,而是經過一組命令來實現對慢查詢日誌的訪問和管理get

  • 獲取慢查詢日誌 slowlog get [n]

每一個慢查詢日誌有4個屬性組成,分別是慢查詢日誌的標識id、發生時間戳、命令耗時、執行命令和參數it

  • 獲取慢查詢日誌列表當前的長度 slowlog len可視化

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

因爲慢查詢日誌是一個先進先出的隊列,也就是說若是慢查詢比較多的狀況下,可能會丟失部分慢查詢命令,爲了防止這種狀況發生,能夠按期執行slow get命令將慢查詢日誌持久化到其餘存儲中(例如MySQL),而後能夠製做可視化界面進行查詢請求

相關文章
相關標籤/搜索