

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

# 最佳實務：線上叢集大小調整
<a name="best-practices-online-resharding"></a>

「重新碎片」**涉及將碎片或節點新增到您的叢集或從叢集移除碎片或節點，並重新分配鍵的空間。多項事物會對重新碎片操作造成影響，例如叢集上的負載、記憶體使用率，以及整體資料大小。為了取得最佳體驗，我們建議您遵循統一工作負載模式分佈的整體叢集最佳實務。此外，我們建議您採取以下步驟。

在初始化重新碎片前，我們建議以下內容：
+ **測試您的應用程式** - 在預備環境中測試應用程式於重新分片期間的行為 (若可能的話)。
+ **提早取得擴展問題的通知** - 重新分片是一項需要大量運算的操作。因此，我們建議在重新分片期間將多核心執行個體的 CPU 使用率保持在 80% 以下，並將單一核心執行個體的 CPU 使用率保持在 50% 以下。在應用程式開始觀察擴展問題之前，監控 MemoryDB 指標並啟動重新分片。可進行追蹤的有用指標包括 `CPUUtilization`、`NetworkBytesIn`、`NetworkBytesOut`、`CurrConnections`、`NewConnections`、`FreeableMemory`、`SwapUsage` 及 `BytesUsedForMemoryDB`。
+ **在向內擴展前確保有足夠的可用記憶體** - 若您要向內擴展，請確保碎片上保留的可用記憶體至少是待移除碎片所使用記憶體的 1.5 倍。
+ **在離峰時段期間起始重新分片程序** - 此做法有助於減少重新分片作業期間的延遲，以及對用戶端造成的輸送量影響。它也有助於更快完成重新碎片，因為有更多的資源可用於重新分配位置。
+ **檢閱用戶端逾時行為** - 有些用戶端可能會在線上叢集調整大小期間產生較高的延遲。使用較高的逾時設定您的用戶端程式庫，有助於解決該情況，即使伺服器上負載較高，系統仍有時間連線。在某些情況下，您可能想要對伺服器開啟大量連線。在這些情況下，請考慮將指數退避新增到重新連線邏輯。這麼做可幫助防止爆量的新連線同時衝擊伺服器。

在重新碎片期間，我們建議以下內容：
+ **避免費時命令** -避免執行任何需要大量運算或輸入/輸出的操作，例如 `KEYS` 和 `SMEMBERS` 命令。我們建議此方法，因為這些操作會增加叢集上的負載，並會影響叢集的效能。請改為使用 `SCAN` 和 `SSCAN` 命令。
+ **遵循 Lua 最佳實務** - 避免長時間執行的 Lua 指令碼，並且一律預先宣告用於 Lua 指令碼的索引鍵。我們建議此方法來判斷 Lua 指令碼並未使用跨位置命令。確認用於 Lua 指令碼中的鍵屬於相同位置。

在重新碎片之後，請注意以下內容：
+ 若目標碎片上的可用記憶體不足，向內擴展可能會僅部分成功。若發生這種結果，請檢閱可用記憶體，並視需要重試操作。
+ 擁有大量項目的位置不會進行遷移。特別是擁有大於 256 MB 項目位置的後序列化不會進行遷移。
+  在重新分片操作期間，Lua 指令碼內不支援 `FLUSHALL` 和 `FLUSHDB` 命令。