Redis慢查詢配置和優化


一.介紹

慢查詢只記錄redis執行時間,並不記錄redis服務到客戶端之間的網絡問題。

超過多少毫秒的才被記錄
slowlog-log-slower-than=10000 毫秒(1秒=1000毫秒=1000000微秒)
=0 則記錄所有 <0 則都不記錄

redis使用一個列表來記錄慢查詢條目,設置后最多記錄1000條,第1001條會將第1條擠出去。

[root@linkops ~]# vi /usr/local/redis/redis.conf
slowlog-max-len=1000

日志有4部分組成

  • 慢查詢日志的標識id
  • 發生時間戳
  • 命令耗時
  • 執行命令和參數

查詢實例:

1) 1) (integer) 666
   2) (integer) 1456786500
   3) (integer) 11615
   4) 1) "BGREWRITEAOF"
2)
   1) (integer) 667
   2) (integer) 1456786534
   3) (integer) 116150
   4) 1) "KEYS *"

二.參數配置

sql動態配置

#超過20000毫秒開始記錄
127.0.0.1:6379> config set slowlog-log-slower-than 20000

#最大允許超過1000毫秒開始記錄
127.0.0.1:6379> config set slowlog-max-len 1000

#保存參數
127.0.0.1:6379> config rewrite

配置文件設置

#修改文件
[root@linkops ~]# vim /usr/local/redis/redis.conf
slowlog-log-slower-than=10000
slowlog-max-len=1000

#重啟redis
[root@linkops ~]# redis-cli shutdown
[root@linkops ~]# nohup redis-server /usr/local/redis/redis.conf &>/dev/null &
[root@linkops ~]# redis-server /usr/local/redis/redis.conf

三.sql操作

#查詢所有條目
slowlog get

#查詢指定條目,最后的參數指定條目數
slowlog get 34

#條目總數
slowlog len

#清理所有條目
slowlog reset

四.優化

1.slowlog-max-len配置建議:線上建議調大慢查詢列表,記錄慢查詢時Redis會對長命令做截斷操作,並不會占用大量內存。增大慢查詢列表可以減緩慢查詢被剔除的可能,例如線上可設置為1000以上。

2.slowlog-log-slower-than配置建議:默認值超過10毫秒判定為慢查詢,需要根據Redis並發量調整該值。由於Redis采用單線程響應命令,對於高流量的場景,如果命令執行時間在1毫秒以上,那么Redis最多可支撐OPS不到1000。因此對於高OPS場景的Redis建議設置為1毫秒。

3.慢查詢只記錄命令執行時間,並不包括命令排隊和網絡傳輸時間。因此客戶端執行命令的時間會大於命令實際執行時間。因為命令執行排隊機制,慢查詢會導致其他命令級聯阻塞,因此當客戶端出現請求超時,需要檢查該時間點是否有對應的慢查詢,從而分析出是否為慢查詢導致的命令級聯阻塞。

4.由於慢查詢日志是一個先進先出的隊列,也就是說如果慢查詢比較多的情況下,可能會丟失部分慢查詢命令,為了防止這種情況發生,可以定期執行slow get命令將慢查詢日志持久化到其他存儲中(例如MySQL),然后可以制作可視化界面進行查詢,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM