redis慢查詢日誌幫助開發和運維人員定位系統存在的慢操作。慢查詢日誌就是系統在命令執行前後計算每條命令的執行時間,當超過預設閥值,就將這條命令的相關資訊(慢查詢id,發生時間戳,耗時,命令的詳細資訊)記錄下來。
redis客戶端一條命令分為如下四部分執行:
需要注意的是,慢查詢日誌只是統計步驟3)執行命令的時間,所以慢查詢並不代表客戶端沒有超時問題。需要注意的是,慢查詢日誌只是統計步驟3)執行命令的時間,所以慢查詢並不代表客戶端沒有超時問題。
一、慢查詢的配置引數:
slowlog-log-slower-than引數就是預設閥值,單位是微秒,預設值是10000,如果一條命令的執行時間超過10000微妙,那麼它將被記錄在慢查詢日誌中。
如果slowlog-log-slower-than的值是0,則會記錄所有命令。
如果slowlog-log-slower-than的值小於0,則任何命令都不會記錄日誌。
slowlog-max-len只是說明了慢查詢日誌最多儲存多少條。redis使用乙個列表來儲存慢查詢日誌,showlog-max-len就是列表的最大長度。當慢查詢日誌已經到達列表的最大長度時,又有慢查詢日誌要進入列表,則最早插入列表的日誌將會被移出列表,新日誌被插入列表的末尾。
二、慢查詢日誌的組成
慢查詢日誌由以下四個屬性組成:
標識id,發生時間戳,命令耗時,執行命令和引數
三、慢查詢日誌的訪問和管理
獲取慢查詢日誌slowlog get [n]
命令:slowlog get [n]
選型:n,可選,代表獲取的日誌條數
例如:showlog get 5
四、慢查詢日誌最佳實踐
線上環境建議調大慢查詢日誌的列表,記錄慢查詢日誌時redis會對長命令做截斷操作,並不會占用大量記憶體。增大慢查詢列表可以減緩慢查詢被剔除出列表的可能性。例如線上可以設定為1000以上。
需要根據redis的併發量調整該值。由於redis採用單執行緒響應名利,對於高流量的場景,如果執行命令的時間在1毫秒以上,那麼redis最多可支撐ops(每秒操作次數)不到1000,因此高ops場景的redis建議設定為1毫秒。
因此客戶端命令的執行時間要大於redis伺服器實際執行命令的時間。因為命令執行排隊極致,慢查詢會導致命令級聯阻塞,因此當客戶端出現請求超時,需要檢查該時間點是否有對應的慢查詢,從而分析是否因為慢查詢導致的命令級聯阻塞
慢查詢較多的情況下,可能會丟失部分慢查詢命令,可以定期執行slow get命令將慢查詢日誌持久化到其他儲存中。然後製作視覺化介面查詢。
趙強老師 Redis的事務和示例
趙強老師 redis的事務和示例 redis會將乙個事務中的所有命令序列化,然後按順序執行。redis不可能在乙個redis事務的執行過程中插入執行另乙個客戶端發出的請求。這樣便能保證redis將這些命令作為乙個單獨的隔離操作執行。在乙個redis事務中,redis要麼執行其中的所有命令,要麼什麼都...
趙強老師 SQL的排序
趙強老師 sql的排序 在oracle中,表中是以非指定順序儲存行資料記錄的,它不管行插入資料庫的順序如何。要按列以公升序或降序查詢行記錄,必須明確指示oracle資料庫要如何去排序。selectcolumn 1,column 2,column 3,from table name order by ...
趙強老師 MapReduce數字的排序
趙強老師 mapreduce數字的排序 mapreduce基於key的全排序的原理 如何使用mapreduce來做全排序?最簡單的方法就是使用乙個partition,因為乙個partition對應乙個reduce的task,然而reduce的輸入本來就是對key有序的,所以很自然地就產生了乙個全排序...