本篇文章主要介紹了Redis的執行的慢查詢的功能的查詢和設定功能,從而可以方便我們在實際工作中,進行分析Redis的效能執行狀況以及對應的優化Redis效能的佐證和指標因素。
在我們5.0左右的版本中Redis使用單執行緒架構和I/O多路複用模型來實現高效能的記憶體資料服務。接下來主要分析Redis單執行緒命令處理機制,接著分析Redis單執行緒模型為什麼效能如此之高。
Redis使用者端與伺服器端的模型主要是下圖所示。
每次使用者端呼叫都經歷了傳送命令、執行命令、返回結果三個過程。
本章的文章內容主要是一下幾點。
慢查詢就是當Redis在處理一條指令的時候,當超過了系統設定的執行時間的閾值的時候,就會被系統當作慢查詢統計和判定。
慢查詢紀錄檔就是系統在命令執行前後計算每條命令的執行時間,當超過預設閾值,就將這條命令的相關資訊(例如:發生時間、耗時、命令的詳細資訊)記錄下來。
Redis慢查詢紀錄檔功能是用於記錄執行時間超過給定時長的命令請求,可以通過檢視慢查詢紀錄檔來監控和優化查詢速度。
說到了Redis慢查詢的危害,就會先說一下Redis的執行機制。
Redis是單執行緒來處理命令,所以一條命令從使用者端到達伺服器端不會立即被執行,所有的命令都會進入一個佇列,然後逐個被執行。
因此Redis伺服器端去執行操作的是可以主要以下幾個步驟:
所有的指令都有先後順序,但是真正意義到達伺服器端的執行順序也是不確定的,因為中間有網路傳輸。但是可以肯定的是,不會有兩條命令被同時執行,這樣就不會產生並行問題,這就是Redis單執行緒的基本模型。
因為單執行緒的問題,一個命令不能執行太長時間,不然會阻塞其他命令的執行。所以慢查詢會造成整體的Redis服務的效能的下降以及CPU的耗時和負載變高。
注意:慢查詢只會記錄執行命令的時間,沒有慢查詢並不代表使用者端沒有超時問題。
監控Redis指令的慢查詢功能,需要明確兩件事:
針對於慢查詢的閾值,在Redis提供了slowlog-log-slower-than
和slowlog-max-len
設定來解決這兩個問題。
例如,該值設為100,執行了一條很慢的命令(例如 keys * ),如果它的執行時間超過了100微秒,則這個命令會被記錄到慢查詢紀錄檔中。
慢查詢紀錄檔最多儲存多少條,並沒有說明存放在那裡?主要通過slowlog-max-len進行控制和設定。從底層角度分析,Redis使用了一個列表來儲存慢查詢紀錄檔,slowlog-max-log就是列表的最大長度。
例如,該值設為5,那麼命令執行時間超過slowlog-log-slower-than設定的時間的命令會被記錄到慢查詢紀錄檔上,如果慢查詢紀錄檔的數量等於5,那麼再新增慢查詢紀錄檔時,需要把最早新增的慢查詢紀錄檔刪除,即慢查詢紀錄檔刪除採用先進先出的方式。
Redis有兩種修改設定的方法:1. 修改組態檔;2. config set命令動態修改。
例如,使用config set命令將slowlog-log-slower-than設定為20000微秒,slowlog-max-len設定為10000:
config set slowlog-log-slower-than 20000
config set slowlog-max-len 10000
config rewrite
如果要Redis將設定持久化到本地組態檔,要執行config rewrite命令,它會重寫組態檔。
慢查詢紀錄檔的的查詢和維護主要是通過:slowlog get、slowlog len、slowlog reset這幾條命令。
慢查詢紀錄檔有4個屬性組成:紀錄檔id、發生時間戳、命令耗時、執行命令和引數。
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"
獲取慢查詢紀錄檔列表當前的長度
127.0.0.1:6379> slowlog len
(integer) 2
上面則說明當前的滿查詢列表中至於連個慢查詢紀錄檔。
實際是對慢查詢紀錄檔列表做清理操作。
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就屬於慢查詢。
本文來自部落格園,作者:洛神灬殤,轉載請註明原文連結:https://www.cnblogs.com/liboware/p/17066112.html,任何足夠先進的科技,都與魔法無異。