確保您有足夠的記憶體來製作 Valkey 或 Redis OSS 快照 - Amazon ElastiCache

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

確保您有足夠的記憶體來製作 Valkey 或 Redis OSS 快照

Valkey 7.2 和更新版本中的快照和同步,以及 Redis OSS 2.8.22 版和更新版本

Valkey 預設支援快照和同步。Redis OSS 2.8.22 推出無叉儲存程序,可讓您將更多記憶體配置給應用程式的使用,而不會在同步和儲存期間增加交換用量。如需詳細資訊,請參閱同步與備份的實作方式

2.8.22 版之前的 Redis OSS 快照和同步

當您使用 ElastiCache for Redis OSS 時,Redis OSS 會在多種情況下呼叫背景寫入命令:

  • 建立備份的快照時。

  • 和複寫群組中的主要節點同步複本時。

  • 為 Redis OSS 啟用僅附加檔案功能 (AOF) 時。

  • 將複本提升為主節點時 (這會引發主節點/複本節點同步)。

每當 Redis OSS 執行背景寫入程序時,您必須有足夠的可用記憶體來容納程序額外負荷。無法擁有足夠的記憶體會造成程序失敗。因此,在建立 Redis OSS 叢集時,請務必選擇具有足夠記憶體的節點執行個體類型。

背景寫入程序和記憶體使用量搭配 Valkey 和 Redis OSS

每當呼叫背景寫入程序時,Valkey 和 Redis OSS 都會放棄其程序 (請記住,這些引擎是單一執行緒)。一個叉將您的資料保留在 Redis OSS .rdb 快照檔案中的磁碟。另一個分支則會服務所有讀取及寫入操作。若要確保您的快照為 point-in-time 快照,所有資料更新及新增內容都會寫入與資料區域分離的可用記憶體區域。

只要您擁有足夠的可用記憶體,可在資料持久存放至磁碟時用於記錄所有寫入操作,便不會發生記憶體不足的問題。若您的狀況符合以下內容中的任何一項,便可能會發生記憶體不足的問題:

  • 您的應用程式執行許多寫入操作,因此需要大量的可用記憶體來接受新的或更新後的資料。

  • 您只有極少的可用記憶體可用於寫入新的或更新後的資料。

  • 您擁有大型的資料集,需要長時間才能持久存放至磁碟,因此需要大量的寫入操作。

下圖說明執行背景寫入程序時的記憶體使用方式。

圖片:背景寫入期間的記憶體使用方式圖

如需執行備份時對效能造成影響的資訊,請參閱自行設計叢集之備份的效能影響

如需 Valkey 和 Redis OSS 如何執行快照的詳細資訊,請參閱 https://http://valkey.io

如需區域及可用區域的詳細資訊,請參閱選擇 ElastiCache 的區域和可用區域

在執行背景寫入時避免耗盡記憶體

BGREWRITEAOF當呼叫 BGSAVE或 等背景寫入程序時,為了防止程序失敗,您必須擁有比寫入操作在程序期間耗用的更多記憶體。最壞的情況是,在背景寫入操作期間,每個記錄都會更新,而且有些新記錄會新增至快取。因此,我們建議您reserved-memory-percent將 2.8.22 之前的 Redis OSS 版本設為 50 (50%),或將 Valkey 和所有 Redis OSS 2.8.22 及更新版本設為 25 (25%)。

maxmemory 值指出您可用於資料及操作額外負荷的可用記憶體。因為您無法修改預設參數群組中的 reserved-memory 參數,因此您必須為叢集建立自訂參數群組。的預設值reserved-memory為 0,這可讓 Redis OSS 使用資料消耗所有最大記憶體,可能為其他用途留下太少的記憶體,例如背景寫入程序。針對根據節點執行個體類型的 maxmemory 值,請參閱 Redis OSS 節點類型特定參數

您也可以使用 reserved-memory 參數來減少方塊上使用的記憶體量。

如需 ElastiCache 中 Valkey 和 Redis 特定參數的詳細資訊,請參閱 Valkey 和 Redis OSS 參數

如需建立及修改參數群組的資訊,請參閱建立 ElastiCache 參數群組修改 ElastiCache 參數群組