什么是慢查詢日志?
慢查詢日志是Redis服務端在命令執行前后計算每條命令的執行時長,當超過某個閾值是記錄下來的日志。日志中記錄了慢查詢發生的時間,還有執行時長、具體什么命令等信息,它可以用來幫助開發和運維人員定位系統中存在的慢查詢。
慢日志配置
查看redis慢日志配置,登陸redis服務器,使用redis-cli客戶端連接redis server
使用命令 config get slow*
1 127.0.0.1:6379> config get slow* 2 1) "slowlog-log-slower-than" 3 2) "10000" 4 3) "slowlog-max-len" 5 4) "128"
慢日志說明:
config get slow* 查詢有關慢日志的配置信息
查詢結果第一條: 1) "slowlog-log-slower-than" 慢日志閾值配置項
查詢結果第二條: 2) "10000" 閾值 ,單位微秒,此處為10毫秒,即超過10毫秒的操作都會記錄下來
查詢結果第三條: 3) "slowlog-max-len" 慢日志記錄保存數量,如果保存數量已滿,會刪除最早的記錄,最新的記錄追加進來
查詢結果第四條: 4) "1000" 慢日志記錄保存數量的閾值,此處保存1000條記錄
查看慢日志記錄
查看redis慢日志記錄,登陸redis服務器,使用redis-cli客戶端連接redis server
使用命令 SLOWLOG GET N,查詢結果如下圖所示:
1) (integer) 65
2) (integer) 1500621891
3) (integer) 1186934
4) 1) "keys"
2) "*CAP:*"
1) (integer) 65 | 值65數據類型為integer,表示該條日志的id |
2) (integer) 1500621891 | 值1500621891數據類型為integer,表示操作redis的unix時間戳,單位秒。 |
3) (integer) 1186934 | 操作耗時,單位微秒 |
4) 1) "keys" | 操作redis的命令 keys |
2) "*CAP:*" | 操作redis的命令keys 的參數,即查詢所有包含CAP字符串的key |
把操作redis的unix時間戳換算成北京時間為 2017/7/21 15:24:51 ,與某系統交易耗時的日志時間點一吻合。某系統交易耗時時間點二的問題也是如此。
結論:
Redis命令keys * 、 keys *xxx* 會遍歷所有key,以查找符合條件的key,當數據量較大時該命令比較耗時,因為redis是單線程,當該命令執行的過程當中會阻塞其他命令請求,如果此時應用系統請求redis,所有的請求都會等待。在生環境中,嚴禁使用keys * 、 keys *xxx*,最好的辦法是禁用相關命令。
補充說明:慢日志中的"BGREWRITEAOF"是redis fork的另外的子進程在執行aof文件重新,該操作不會影響應用對redis的讀寫請求。