首頁  >  文章  >  資料庫  >  redis慢查詢是什麼

redis慢查詢是什麼

藏色散人
藏色散人原創
2020-11-04 17:12:143583瀏覽

redis慢查詢指的是命令執行時長比較長的查詢,其慢查詢日誌就是Redis服務端在命令執行前後計算每個命令的執行時長,當超過某個閾值是記錄下來的日誌,日誌中記錄了慢查詢發生的時間,還有執行時長、具體什麼指令等資訊。

redis慢查詢是什麼

推薦:《redis教學

什麼是慢查詢?

慢查詢,顧名思義就是比較慢的查詢,但是究竟是哪裡慢呢?首先,我們來了解Redis命令執行的整個過程:

  1. #發送命令
  2. 命令排隊
  3. 命令執行
  4. 傳回結果

在慢查詢的定義中,統計比較慢的時間段指的是指令執行這個步驟。沒有慢查詢,不表示客戶端沒有超時問題,有可能網路傳輸有延遲,也有可能排隊的命令比較多。

因為Redis中命令執行的排隊機制,慢查詢會導致其他命令的級聯阻塞,所以當客戶端出現請求逾時的時候,需要檢查該時間點是否有慢查詢,從而分析出由於慢查詢導致的命令級聯阻塞。

什麼是慢查詢日誌?

慢查詢日誌是Redis服務端在命令執行前後計算每個命令的執行時長,當超過某個閾值是記錄下來的日誌。日誌中記錄了慢查詢發生的時間,還有執行時長、具體什麼命令等信息,它可以用來幫助開發和維運人員定位系統中存在的慢查詢。

如何取得慢查詢日誌?

可以使用slowlog get指令取得慢查詢日誌,在slowlog get後面還可以加一個數字,用來指定取得慢查詢日誌的條數,例如,取得3個慢查詢日誌:

> slowlog get 3
1) 1) (integer) 6107
   2) (integer) 1616398930
   3) (integer) 3109
   4) 1) "config"
      2) "rewrite"
2) 1) (integer) 6106
   2) (integer) 1613701788
   3) (integer) 36004
   4) 1) "flushall"
3) 1) (integer) 6105
   2) (integer) 1608722338
   3) (integer) 20449
   4) 1) "scan"
      2) "0"
      3) "MATCH"
      4) "*comment*"
      5) "COUNT"
      6) "10000"

從上面的例子中,可以看出每一個慢查詢日誌都有4個屬性組成:

  1. 唯一標識ID
  2. 指令執行的時間戳記
  3. 指令執行時間
  4. 執行的命名與參數

如何取得慢查詢日誌的長度?

可以使用slowlog len指令來取得慢查詢日誌的長度,例如:

> slowlog len
(integer) 121

在上例中,目前Redis中有121個慢查詢日誌。

如何清理慢查詢日誌?

可以使用slowlog reset指令清理慢查詢日誌,例如:

> slowlog len
(integer) 121
> slowlog reset
OK
> slowlog len
(integer) 0

怎麼設定慢查詢的參數?

如同上面所提到的,慢查詢需要以下兩個配置:

  1. 指令執行時長的指定閾值。
  2. 存放慢查詢日誌的條數。

Redis對應提供了兩個參數:slowlog-log-slower-than和slowlog-max-len,接下來我們將詳細介紹這兩個參數。

slowlog-log-slower-than

slowlog-log-slower-than的作用是指定指令執行時長的閾值,執行指令的時長超過這個閾值時就會被記錄下來。它的單位是微秒(1秒 = 1000毫秒 = 1000000微秒),預設是10000微秒。如果把slowlog-log-slower-than設定為0,將會記錄所有指令到日誌中。如果把slowlog-log-slower-than設定小於0,將會不記錄任何指令到日誌中。

在實際的生產環境中,需要根據Redis並發量來調整該配置。因為Redis採用單執行緒回應指令,如果指令執行時間在1000微秒以上,那麼Redis最多可支撐OPS不到1000,所以對於高並發場景的Redis建議設定為1000微秒

slowlog-max-len

slowlog-max-len的作用是指定慢查詢日誌最多儲存的條數。實際上,Redis使用了一個清單存放慢查詢日誌,slowlog-max-len就是這個清單的最大長度。當一個新的指令滿足滿足慢查詢條件時,被插入這個清單中。當慢查詢日誌清單已經達到最大長度時,最早插入的那條指令將會被從清單中移出。例如,slowlog-max-len被設定為10,當有第11條指令插入時,在清單中的第1條指令先被移出,然後再把第11條指令放入清單。

記錄慢查詢是Redis會對長命令進行截斷,不會大量佔用大量記憶體。在實際的生產環境中,為了減慢查詢被移出的可能和更方便地定位慢查詢,建議將慢查詢日誌的長度調整的大一些。例如可以設定為1000以上

如何進行設定

在Redis中有兩個修改配置的方法:

  1. 修改Redis配置文件。比如,把slowlog-log-slower-than设置为1000,slowlog-max-len设置为1200:
slowlog-log-slower-than 1000
slowlog-max-len 1200
  1. 使用config set命令动态修改。比如,还是把slowlog-log-slower-than设置为1000,slowlog-max-len设置为1200:
> config set slowlog-log-slower-than 1000
OK
> config set slowlog-max-len 1200
OK
> config rewrite
OK

如果要Redis把配置持久化到本地配置文件,需要执行config rewrite命令。

总结

慢查询指的是命令执行时长比较长的查询。通过slowlog get命令获取慢查询日志;通过slowlog len命令获取慢查询日志的长度;通过slowlog reset命令清理慢查询日志。通过slowlog-log-slower-than配置命令执行时长的阈值;通过slowlog-max-len配置慢查询日志最多存储的条数


以上是redis慢查詢是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn