全部產品
Search
文件中心

Tair (Redis® OSS-Compatible):為什麼執行個體記憶體警示與監控的記憶體使用量率不一致

更新時間:Nov 02, 2024

如果Tair (Redis OSS-compatible)執行個體的記憶體使用量率警示顯示記憶體佔用較高,或您的應用程式出現OOM異常,但效能監控顯示的記憶體使用量率並不高,可參考本文排查原因並解決問題。

問題現象

現象一:

您收到執行個體記憶體警示,顯示記憶體使用量率超過閾值(例如,連續滿足3次平均值>=90%),但查看控制台的監控頁面發現記憶體使用量率遠低於閾值

現象二:

您的應用程式出現異常command not allowed when used memory > 'maxmemory',但查看控制台的監控頁面發現記憶體並沒有滿只有一個資料分區的記憶體使用量率較高

問題原因

為什麼記憶體監控與記憶體警示不一致?

如果效能監控與記憶體警示中的記憶體使用量率不一致,可能是因為您的執行個體是叢集版您查看的是執行個體全域的監控,而不是資料節點的監控

請確認您收到的警示資訊中的執行個體詳情是否寫了nodeId = <執行個體ID>-db-<數字>。如果是,表示僅<執行個體ID>-db-<數字>標識的資料節點的記憶體使用量超過閾值。

請按以下步驟確認該資料節點的記憶體使用量率是否與記憶體警示一致。

  1. 訪問執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 在左側導覽列,單擊性能監控

  3. 單擊數據節點頁簽,選擇<執行個體ID>-db-<數字>對應的資料節點,查看該資料節點的記憶體使用量率是否與記憶體警示一致。image.png

為什麼某個資料節點的記憶體使用量率很高,其他資料節點的記憶體使用量率卻很低?

當叢集版執行個體中有一個或N個資料節點的記憶體使用量率非常高,而其他資料節點的記憶體使用量率很低時,意味著資料可能發生了傾斜。您可以使用發起執行個體診斷功能,一鍵排查當前執行個體是否存在傾斜的情況。

為什麼會發生記憶體傾斜?

發生記憶體傾斜,主要原因如下:

  • 存在大Key

    叢集版執行個體通過CRC演算法計算出Key所屬的Slot,並將資料寫入Slot所屬的資料分區節點。

    即使Key被均勻地分散到不同的資料分區節點,但如果某個Key存放過多或過大的field也會導致單個Key過大,從而導致記憶體傾斜。

  • 使用了Hash Tag

    使用Hash Tag時,例如user:{1000}:name,執行個體會對花括弧內的字串進行CRC計算,並將帶有相同Hash Tag的Key映射到相同的槽,即存在同一資料分區節點。如果大量的Key設定相同的Hash Tags將會導致資料集中在某個資料分區節點,從而導致記憶體傾斜。

解決方案

檢查是否存在大Key,並拆分大Key

尋找大Key

通過離線全量Key分析找出大Key。

更多找出大Key的方法,請參見發現並處理大Key和熱Key

拆分大Key

例如將含有數萬成員的一個HASH Key拆分為多個HASH Key,並確保每個Key的成員數量在合理範圍。在叢集架構執行個體中,拆分大Key能對資料分區間的記憶體平衡起到顯著作用。

檢查是否使用了Hash Tag

如果使用了Hash Tag,請根據業務實際情況,評估將一個Hash Tag拆分為多個Hash Tag,使資料更加均勻地分布在不同的資料分區節點上。

擴容執行個體規格

擴容執行個體規格,可以增加執行個體每個分區的記憶體,是改善記憶體傾斜的臨時解決方案,具體操作請參見變更執行個體配置

重要
  • 變更配置時執行個體會進行資料扭曲預檢查,若您選擇的執行個體規格無法解決記憶體傾斜問題,執行個體會進行攔截與報錯,請您調大執行個體規格後重試。

  • 在成功升級執行個體規格後,會改善記憶體傾斜問題,但可能也引起頻寬傾斜或CPU傾斜。