在排查Redis資料庫執行個體的故障和效能降低的原因時,您可以通過時延洞察功能,對資料庫所有命令以及自訂特殊事件進行時延統計,得到精確到微秒層級的延遲時間,從事件、時間、時延三個維度對執行個體進行分析,快速定位和修複故障。
前提條件
Redis執行個體為如下版本,升級方法請參見升級小版本與代理版本。
Tair(Redis企業版)記憶體型,小版本為1.6.9及以上。若需統計Tair module命令,請升級小版本至1.7.28及以上。
社區版5.0,小版本為5.1.4及以上。
社區版6.0,小版本為0.1.15及以上。
社區版7.0,小版本為7.0.0.6及以上。
功能簡介
原生Redis在2.8.13版引入延遲監控(Latency Monitoring)特性,基於事件機制協助您發現和排查可能的時延問題。該功能僅支援擷取最近160秒的資料,且只存取每秒內時延最高的事件。
時延洞察是KVStore for Redis提供的升級版時延統計功能,支援記錄多達27個事件及所有Redis命令的執行耗時,並支援儲存最近3天內所有的時延統計資料。時延洞察具有如下特點:
持久化:支援資料持久化,時延毛刺可追溯。
高精度:支援全量事件微秒層級監控資訊。
高效能:非同步實現,對效能幾乎無影響。
即時性:支援即時資料查詢和彙總操作。
多維度:提供全面的時延資訊,可支援從事件、時間、時延三個維度對執行個體進行分析。
費用
此功能不收費。
操作步驟
登入DAS控制台。
在左側導覽列中,單擊執行個體監控。
找到目標執行個體,單擊執行個體ID,進入目標執行個體詳情頁。
在左側導覽列,單擊請求分析 > 時延洞察。
在時延洞察頁,查看對應節點選定時間段內的統計資訊。
對於叢集和讀寫分離架構的執行個體,支援分別查看數據節點和代理節點的統計資訊。
說明僅支援查詢3天內的歷史資料,且開始時間和結束時間的間隔不超過1小時。
單擊列表中的統計數字,查看事件對應指標隨時間的變化趨勢。在趨勢圖中,您也可以選擇對應的指標,查看其隨時間的變化趨勢。
說明僅會記錄與展示耗時超過閾值的命令或事件。若您在使用該功能的過程中遇到執行個體時延問題,您可參考常見Latency(時延)事件的處理建議文檔處理時延問題。
指標
說明
事件
事件名稱。
總數
事件的數量。
時延avg(us)
事件的平均時延,單位 :us。
時延max(us)
事件的最大時延,單位: us。
<1ms彙總
時延小於1ms事件的彙總統計數量,單擊查看<1us、<2us、<4us、<8us、<16us、<32us、<64us、<128us、<256us、<512us和<1ms等不同時間範圍的統計資料。
說明不同時間範圍的統計規則:例如,<1us,統計時延在0~1us之間的事件數目量;<2us,統計時延在1us~2us之間的事件數目量。
<2ms
<4ms
...
>33s
對應時延範圍內的事件數目量。
說明不同時間範圍的統計規則:例如,<2ms,統計時延在1ms~2ms之間的事件數目量;>33s,統計時延大於33s的事件數目量。
常見特殊事件附錄
類別 | 名稱 | 閾值 | 說明 |
記憶體驅逐相關 | EvictionDel | 30ms | 在逐出周期中刪除Key的耗時。 |
EvictionLazyFree | 30ms | 在逐出周期中,等待後台線程釋放記憶體的耗時。 | |
EvictionCycle | 30ms | 一次逐出周期的耗時,包含逐出資料的選擇、刪除操作,及後台線程等待的時間。 | |
記憶體磁碟重組 | ActiveDefragCycle | 100ms | 記憶體磁碟重組過程的耗時。 |
Rehash | Rehash | 100ms | 發生Rehash過程的耗時。 |
資料結構升級 | ZipListConvertHash | 30ms | Hash編碼類別型轉換耗時(Ziplist轉換為Dict)。 |
IntsetConvertSet | 30ms | Set編碼類別型轉換耗時(Intset轉換為Set)。 | |
ZipListConvertZset | 30ms | Zset編碼類別型轉換耗時(Ziplist轉換為Skiplist)。 | |
AOF相關 | AofWriteAlone | 30ms | 一次正常寫入AOF檔案的耗時。 |
AofWrite | 30ms | 寫入AOF(AppendOnly File)的耗時。每次成功寫入AOF檔案後,會記錄AofWrite事件以及AofWriteAlone、AofWriteActiveChild、AofWritePendingFsync三者中的一種事件。 | |
AofFstat | 30ms | Fstat的耗時。 | |
AofRename | 30ms | Rename的耗時統計。 | |
AofReWriteDiffWrite | 30ms | 子進程重寫完AOF後,主進程把buffer中的增量AOF寫入的耗時。 | |
AofWriteActiveChild | 30ms | 寫入AOF檔案的耗時,寫入過程中存在其他子進程也在向磁碟寫資料等情況。 | |
AofWritePendingFsync | 30ms | 寫入AOF檔案的耗時,寫入過程中存在後台進程正在執行fsync。 | |
RDB相關 | RdbUnlinkTempFile | 50ms | bgsave子進程中斷後刪除臨時RDB檔案的耗時。 |
其他 | Commands | 30ms | 常規命令(未被標為fast)的耗時。 |
FastCommand | 30ms | 被標為fast的命令(命令的時間複雜度為O(1)和O(log N))的耗時。標為fast的命令具體請參見FastCommand清單。 | |
EventLoop | 50ms | Main Loop一次的耗時。 | |
Fork | 100ms | 調用Fork操作的耗時。 | |
Transaction | 50ms | 實際事務執行的耗時。 | |
PipeLine | 50ms | 多線程Pipeline耗時。 | |
ExpireCycle | 30ms | 一次清理到期Key周期的耗時。 | |
ExpireDel | 30ms | 在清理到期Key周期中,刪除Key的耗時。 | |
SlotRdbsUnlinkTempFile | 30ms | Slot bgsave子進程中斷後刪除臨時RDB檔案的耗時。 | |
LoadSlotRdb | 100ms | Slot載入至(load)RDB的耗時。 | |
SlotreplTargetcron | 50ms | Slot子進程載入至(load)RDB到一個臨時的資料庫(DB)後,再將其移動至目標資料庫(DB)的耗時。 |
FastCommand清單
清單中列舉了常用的命令,更多命令請在Commands | Redis官網中查看。ACL類中帶有@fast標記的命令均屬於FastCommand。
ACCOUNT | ADMINAUTH | ASKING | AUTH |
BKLIST | BZPOPMAX | BZPOPMIN | DBSIZE |
DECR | DECRBY | DISCARD | ECHO |
EXISTS | EXPIRE | EXPIREAT | Get |
GETBIT | HDEL | HEXISTS | HGET |
HINCRBY | HINCRBYFLOAT | HKCOUNTER | HKSWITCH |
HLEN | HMGET | HMINCRBY | HMINCRBYFLOAT |
HMSET | HSET | HSETNX | HSTRLEN |
INCR | INCRBY | INCRBYFLOAT | LASTSAVE |
LLEN | LPOP | LPUSH | LPUSHX |
MGET | MOVE | MULTI | PERSIST |
PEXPIRE | PEXPIREAT | PFADD | PING |
PTTL | PUBLISH | READONLY | READWRITE |
RENAMENX | RPOP | RPUSH | RPUSHX |
SADD | SCARD | SELECT | SETNX |
SISMEMBER | SMOVE | SPOP | SREM |
STRLEN | SWAPDB | TIME | TOUCH |
TTL | TYPE | UNLINK | UNWATCH |
WATCH | XACK | XADD | XCLAIM |
XDEL | XLEN | XSETID | XTRIM |
ZADD | ZCARD | ZCOUNT | ZINCRBY |
ZLEXCOUNT | ZPOPMAX | ZPOPMIN | ZRANK |
ZREM | ZREVRANK | ZSCORE | ZSCOREAVG |