本文向您介紹常見Latency事件超過閾值時間的原因及處理建議,您可參考本文瞭解並處理對應的時延問題。
背景資訊
原生Redis在2.8.13版引入時延監控(Latency Monitoring)特性,基於事件機制協助您發現和排查可能的時延問題。該功能僅支援擷取最近160秒的資料,且只存取每秒內時延最高的事件。
時延洞察是雲資料庫 Tair(相容 Redis)提供的升級版時延統計功能,支援記錄多達27個事件及所有命令的執行耗時,並支援儲存最近3天內所有的時延統計資料。關於各事件的詳細說明及對應閾值資訊,請參見常見特殊事件附錄。
常見Latency事件
Latency事件 | 事件描述 | 常見逾時原因 | 處理建議 |
EvictionCycle | 一次逐出周期的耗時,包含逐出資料的選擇、刪除操作,及後台線程等待的時間。 | 可能性較多,需要更進一步分析EvictionDel、EvictionLazyFree事件的耗時。 |
|
EvictionDel | 在逐出周期中刪除Key(鍵)的耗時。 | 通常在逐出大Key時產生。 |
|
EvictionLazyFree | 在逐出周期中,等待後台線程釋放記憶體的耗時。 | 如果觸發逐出時沒有合格Key,且後台線程正在釋放記憶體(例如刪除大Key)時,則需要等待至後台線程釋放記憶體至Maxmemory以下或後台線程釋放記憶體結束。 |
|
ExpireCycle | 一次清理到期Key周期的耗時。 | 通常在刪除大Key時產生。 |
|
ExpireDel | 在清理到期Key周期中,刪除Key的耗時。 | 通常在刪除大Key時產生。 | |
AofWrite | 寫入AOF(AppendOnly File)的耗時。每次成功寫入AOF檔案後,會記錄AofWrite事件以及AofWriteAlone、AofWriteActiveChild、AofWritePendingFsync三者中的一種事件。 | 可能性較多,需要更進一步分析AofWriteAlone、AofWriteActiveChild、AofWritePendingFsync事件的耗時。 | 如果對資料持久化沒有要求,建議可以關閉appendonly參數,關閉AOF持久化。 |
AofWriteAlone | 一次正常寫入AOF檔案的耗時。 | 資料寫入量較大,或磁碟效能存在瓶頸。 | |
AofWriteActiveChild | 寫入AOF檔案的耗時,寫入過程中存在其他子進程也在向磁碟寫資料等情況。 | 寫入AOF檔案過程中,其他子進程也在向磁碟寫資料。 | |
AofWritePendingFsync | 寫入AOF檔案的耗時,寫入過程中存在後台進程正在執行fsync。 | 寫入AOF檔案過程中,存在後台進程正在執行fsync。 | |
Commands | 常規命令(未被標為fast)的耗時。 | 通常是特殊命令造成,例如執行KEYS命令,遍曆所有資料。 | |
FastCommand | 被標為fast的命令(命令的時間複雜度為O(1)和O(log N))的耗時。 | 通常是對大Key執行命令產生,例如執行 | |
Fork | 調用Fork操作的耗時。 | 通常在AOF Rewrite(重寫)時產生。 | 如果是AOF Rewrite導致,且對資料持久化沒有要求,建議關閉appendonly參數,關閉AOF持久化,關閉後,通常可以解決此類問題。 |
更多資訊,請參見Redis Diagnosing latency issues。