標籤:標準 問題 行修改 設定 慢查詢 內容 ack 版本 測試
首先我們需要知道redis的慢查詢日誌有什麼用?日常在使用redis的時候為什麼要用慢查詢日誌?
第一個問題:
慢查詢日誌是為了記錄執行時間超過給定時間長度的redis命令請求
第二個問題:
讓使用者更好地監視和找出在業務中一些慢redis操作,找到更好的最佳化方法
在Redis中,關於慢查詢有兩個設定--慢查詢最大逾時時間和慢查詢最大日誌數。
1. 可以通過修改設定檔或者直接在互動模式下輸入以下命令來設定慢查詢的時間限制,當超過這個時間,查詢的記錄就會加入到記錄檔中。
CONFIG SET slowlog-log-slower-than num
設定超過多少微妙的查詢為慢查詢,並且將這些慢查詢加入到記錄檔中,num的單位為毫秒,windows下redis的預設慢查詢時10000微妙即10毫秒。
2. 可以通過設定最大數量限制日誌中儲存的慢查詢日誌的數量,此設定在互動模式下的命令如下:
CONFIG SET slowlog-max-len num
設定日誌的最大數量,num無單位值,windows下redis預設慢查詢日誌的記錄數量為128條。
命令的解析:
CONFIG 命令會使redis用戶端自行去尋找redis的.conf 設定檔,找到對應的配置項進行修改。
以上的都是在互動模式下對redis進行配置,跟直接在.conf檔案下修改配置行沒有什麼區別,都是可以實現以上的慢查詢日誌記錄功能的,
但是需要注意的是,在用戶端的互動模式下輸入CONFIG SET命令,只針對當前的會話來執行日誌記錄的設定,其他的會話(重新啟動
redis服務端),那麼還是老樣子,按照redis.conf檔案的預設設定來執行?為什麼會是這樣的?因為redis是基於記憶體的,當一個退出一個
用戶端之後,所有的設定都會退回到預設版本。下次想設定慢查詢日誌配置,還是需要重新鍵入命令。那麼在.conf檔案下中修改配置呢?
這種辦法就相對一勞永逸了,因為每次服務端的啟動都是以設定檔為基礎的,所以slowlog日誌會預設以.conf檔案中的設定為標準。
即使這樣,當做一些測試的時候,個人比較喜歡直接在互動模式下修改,互動模式下修改可以在當前的狀態下和以後開啟redis用戶端
(在服務端還沒重啟的條件下)都會執行慢查詢日誌的記錄功能。而如果在.conf檔案中修改配置項,那麼需要重新啟動redis伺服器,
來使這個功能生效,下次需要修改配置,還得到.conf檔案來重新設定。
為更完整描述設定檔過程,我這裡寫一下如何在.conf檔案中如何修改配置項
windows作業系統下用記事本,linux作業系統下用sublim text 或者vim開啟。找到
對應下面就會找到配置選項了
那麼接下來,如何查看慢查詢呢?
又是進入互動模式下,命令很簡單。
SLOWLOG GET
(當然也可以用小寫,redis用戶端對大小寫沒有太嚴格的限制)
以windows為例查看記錄如下
為了方便解說,我設定逾時時間為0毫秒,日誌記錄為1條
那麼記錄的中的1)2)3)4)分別表示什麼呢?
1)表示日誌唯一識別碼uid
2)命令執行時系統的時間戳記
3)命令執行的時間長度,以微妙來計算
4)命令和命令的參數
做日誌查詢的時候,可以通過3)來查看是具體的命令已耗用時間(注意:再強調一次,時間的單位是微妙,但對於一個插入操作來說,
10000微妙,也就是10毫秒即0.01秒已經可以算是慢操作了)哪些操作出了問題。當然這隻限於測試使用,如果需要當業務出現redis
插入查詢緩慢的事件,需要去查看redis產生的持久型日誌,這需要額外去配置一些內容,其中涉及到了叢集和分布式,這裡先點到為止。
筆者希望自己往後有更深刻的認識的時候再來寫一遍相關的文章。
淺談Redis之慢查詢日誌