一分鐘快速搞懂Redis的慢查詢分析

2021-10-04 03:30:37 字數 3175 閱讀 5028

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

傳送命令

命令排隊

命令執行

返回結果

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

因為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個屬性組成:

唯一標識id

命令執行的時間戳

命令執行時長

執行的命名和引數

可以使用slowlog len命令獲取慢查詢日誌的長度,比如:

> slowlog len

(integer) 121

在上例中,當前redis中有121條慢查詢日誌。

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

> slowlog len

(integer) 121

> slowlog reset

ok> slowlog len

(integer) 0

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

命令執行時長的指定閾值。

存放慢查詢日誌的條數。

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中有兩個修改配置的方法:

修改redis配置檔案。比如,把slowlog-log-slower-than設定為1000,slowlog-max-len設定為1200:

slowlog-log-slower-than 1000

slowlog-max-len 1200

使用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配置慢查詢日誌最多儲存的條數。

一分鐘sed入門(一分鐘系列)

1.簡介 sed是一種行編輯器,它一次處理一行內容。2.sed呼叫方式 sed options command file s sed options f scriptfile file s 第一種直接在命令列中執行,第二種把命令寫到了指令碼中,二者無本質區別。示例 1 列印hello.txt的內容 ...

一分鐘快速入門openstack

一 它是什麼,能幹什麼 想認識乙個事物,必須先弄明白它是什麼,能幹什麼。首先說一下,openstack是乙個搭建雲平台的乙個解決方案,說他不是個軟體,但是我覺得說是乙個軟體,能夠讓初學者更容易接受和理解,在後期的慢慢接觸過程中,大家就能夠理解,為什麼說它不是乙個軟體。openstack能幹什麼,可以...

一分鐘看懂mysql 一分鐘,看懂易貨

從20世紀80年代開始,易貨公司在美國加拿大 澳大利亞等國興起,成為這些國家減少現金用量 增加銷售 減少庫存 開發新客戶 開闢新市場 促進經濟發展的重要產業。也成為了企業消化庫存商品 剩餘生產能力 無形資產的有效方式和在遭遇資金瓶頸時的新選擇。2015年以來,中國線下易貨店開始了矇眼狂奔,在河南南陽...