Redis-慢查詢分析

一.慢查詢日誌

慢查詢日誌幫助開發和運維人員定位系統存在的慢操做。慢查詢日誌就是系統在命令執行先後計算每條命令的執行時間,當超過預設閥值,就將這條命令的相關信息(慢查詢ID,發生時間戳,耗時,命令的詳細信息)記錄下來。Redis客戶端一條名利分爲以下四部分執行:redis

 


須要注意的是,慢查詢日誌只是統計步驟3)執行命令的時間,因此慢查詢並不表明客戶端沒有超時問題。服務器

二. 慢查詢的配置參數

2.1 慢查詢的預設閥值  slowlog-log-slower-than

slowlog-log-slower-than參數就是預設閥值,單位是微秒,默認值是1000,若是一條命令的執行時間超過10000微妙,那麼它將被記錄在慢查詢日誌中。網絡

若是slowlog-log-slower-than的值是0,則會記錄全部命令。併發

若是slowlog-log-slower-than的值小於0,則任何命令都不會記錄日誌。運維

 

2.2 慢查詢日誌的長度slowlog-max-len

slowlog-max-len只是說明了慢查詢日誌最多存儲多少條。Redis使用一個列表來存儲慢查詢日誌,showlog-max-len就是列表的最大長度。當慢查詢日誌已經到達列表的最大長度時,又有慢查詢日誌要進入列表,則最先插入列表的日誌將會被移出列表,新日誌被插入列表的末尾。ide

 

三 慢查詢日誌的組成

慢查詢日誌由如下四個屬性組成:標識ID,發生時間戳,命令耗時,執行命令和參數spa

四 慢查詢日誌的訪問和管理

4.1 獲取慢查詢日誌slowlog get [n]

命令:slowlog get [N]線程

選型:N,可選,表明獲取的日誌條數日誌

例如:showlog get 5code

返回:

1) 1) (integer) 1

2) (integer) 1499338521

    3) (integer) 10101

    4) 1) "SETEX"

     2) "com.yonyou.iuap.portal.integration.ticket.entity.Ticket/AhZwvMNspZnYEy3Zs5BhdA"

     3) "3600"

     4)"{\"id\":\"AhZwvMNspZnYEy3Zs5BhdA\",\"usercode\":\"b540903b584144d38a365a1fc593ee68\",\"expire\":1499342121122,\"extendAttributes\":{}}"

2)1) (integer) 0

   2)(integer) 1499251333

   3)(integer) 42683

   4)1) "HGETALL"

     2) "IUAP_SESSION_USER:b540903b584144d38a365a1fc593ee68"

4.2 獲取慢查詢日誌列表的當前長度slowlog len

命令:slowlog len

返回:慢日誌列表的當前長度

例如:slowlog len

返回:2

 

4.3 慢查詢日誌重置slowlog reset

慢查詢日誌重置實際是對列表作清理操做。

命令:slowlog reset

例如:slowlog reset

     slowlog len

返回: 0

 

五 慢查詢日誌最佳實踐

(1)slowlog-max-len的設置建議

線上環境建議調大慢查詢日誌的列表,記錄慢查詢日誌時Redis會對長命令作截斷操做,並不會佔用大量內存。增大慢查詢列表能夠減緩慢查詢被剔除出列表的可能性。例如線上能夠設置爲1000以上。

(2)slowlog-log-lower-than的設置建議

須要根據redis的併發量調整該值。因爲redis採用單線程響應名利,對於高流量的場景,若是執行命令的時間在1毫秒以上,那麼redis最多可支撐OPS(每秒操做次數)不到1000,所以高OPS場景的REDIS建議設置爲1毫秒。

(3)慢查詢只記錄命令執行時間,並不包括命令排隊時間和網絡傳輸時間。所以客戶端

命令的執行時間要大於redis服務器實際執行命令的時間。由於命令執行排隊極致,慢查詢會致使命令級聯阻塞,所以當客戶端出現請求超時,須要檢查該時間點是否有對應的慢查詢,從而分析是否由於慢查詢致使的命令級聯阻塞

(4)慢查詢日誌是一個先進先出隊列,慢查詢較多的狀況下,可能會丟失部分慢查詢命令,能夠按期執行slow get命令將慢查詢日誌持久化到其餘存儲中。而後製做可視化界面查詢。

相關文章
相關標籤/搜索