Redis高階功能之慢查詢日誌

2021-10-04 22:20:19 字數 3356 閱讀 5374

redis提供了5種資料結構,但除此之外,redis還提供了注入慢查詢分析,redis shellpipeline、事務、與lua指令碼、bitmapshyperloglogpubsubgeo等附加功能,這些功能可以在某些場景發揮很重要的作用.

許多儲存系統(如:mysql)提供慢查詢日誌幫助開發與運維人員定位系統存在的慢操作.所謂慢查詢日誌就是系統在命令執行前後計算每條命令的執行時間,當超過預設閾值,就將這條命令的相關資訊(例如:發生時間,耗時,命令的詳細資訊)記錄到慢查詢日誌中,redis也提供了類似的功能。

redis命令執行流程:

1.傳送命令

2.命令排隊

3.命令執行

4.返回結果

需要注意,慢查詢只統計步驟3的時間,所以沒有慢查詢並不代表客戶端沒有超時問題。

對於慢查詢功能,需要明確兩件事:

redis提供了slowlog-log-slower-thanslowlog-max-len配置來解決這兩個問題.從字面意思就可以看出,slowlog-log-slower-than就是這個預設閾值,它的單位是毫秒(1秒=1000000微秒)預設值是10000,假如執行了一條"很慢"的命令(例如key *),如果執行時間超過10000微秒,那麼它將被記錄在慢查詢日誌中。線上例項建議設定為1毫秒便於及時發現毫秒級以上的命令

如果slowlog-log-slower-than=0會記錄所有命令,slowlog-log-slower-than<0對於任何命令都不會進行記錄.

從字面意思看,slowlog-max-len只是說明了慢查詢日誌最多儲存多少條,並沒有說明存放在**?實際上redis使用了乙個列表來儲存慢查詢日誌,slowlog-max-len就是列表的最大長度.乙個新的命令滿足慢查詢條件時被插入到這個列表中,當慢查詢日誌列表已處於其最大長度時,最早插入的乙個命令將從列表中移出,例如slowlog-max-len設定長度為64.當有第65條慢查詢日誌插入的話,那麼隊頭的第一條資料就出列,第65條慢查詢就會入列.

redis中有兩種修改配置的方法,一種是修改配置檔案,另一種是使用config set命令動態修改.例如下面使用config set命令將slowlog-log-slower-than設定為1毫秒.slowlog-max-len設定為1024:

config set slowlog-log-slower-than 1000

config set slowlog-max-len 1024

config rewrite

或者[root@localhost ~]# vim /usr/local/redis/6379.conf

# slow log

slowlog-log-slower-than 1000

slowlog-max-len 1024

如果需要將redis將配置持久化到本地配置檔案,要執行config rewrite命令.如下:

雖然慢查詢日誌存放在redis記憶體列表中,但是redis並沒有暴露這個列表的鍵,而是通過一組命令來實現對慢查詢日誌的訪問和管理.

(1) 獲取慢查詢日誌

slowlog get [n]
引數n可以指定條數,例:

127.0.0.1:6370> slowlog get

1) 1) (integer) 666

2) (integer) 1456786500

3) (integer) 11615

4) 1) "bgrewriteaof"

2) 1) (integer) 665

2) (integer) 1456718400

3) (integer) 12006

4) 1) "setex"

2) "video_info_200"

3) "300"

4) "2"

...

可以看到每個查詢日誌有4個屬性組成,分別是慢查詢日誌的表示id、發生時間戳、命令耗時、執行命令和引數,慢查詢列表:

(2) 獲取慢查詢日誌列表當前長度

slowlog len
例如,當前redis中有45條慢查詢:

127.0.0.1:6370> slowlog len

(integer) 45

(3) 慢查詢日誌重置

slowlog reset
實際是對列表做清理操作,例如: 

127.0.0.1:6370> slowlog len

(integer) 23

127.0.0.1:6370> slowlog reset

ok127.0.0.1:6370> slowlog len

(integer) 0

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

Redis擴充套件功能之慢查詢日誌

在mysql中存在慢日誌的概念 參考mysql索引原理之查詢優化 池塘裡洗澡的鴨子 cnblogs.com redis中也提供慢日誌的功能用於監視和優化查詢。下面介紹redis中慢日誌相關的操作 1 設定 在redis.conf中可以配置和慢查詢日誌相關的選項 redis使用列表儲存慢查詢日誌,採用...

Redis高階功能 慢查詢日誌

redis 提供了5種資料結構,但除此之外,redis 還提供了注入慢查詢分析,redis shell pipeline 事務 與 lua 指令碼 bitmaps hyperloglog pubsub geo 等附加功能,這些功能可以在某些場景發揮很重要的作用.許多儲存系統 如 mysql 提供慢查...

mysql之慢查詢日誌

一 mysql的慢查詢日誌是mysql提供的用來記錄響應時間超過閾值的語句,預設情況下mysql沒有開啟慢查詢日誌,需要手動開啟,開啟慢查詢日誌對資料庫效能會有一點影響,所以在不調優的情況下不建議開啟慢查詢日誌功能 1 檢視是否開啟慢查詢日誌的命令 show variables like slow ...