

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Valkey または Redis OSS スナップショットを作成するのに十分なメモリがあることを確認する
<a name="BestPractices.BGSAVE"></a>

**Valkey 7.2 以降、および Redis OSS バージョン 2.8.22 以降のスナップショットと同期**  
Valkey は、スナップショットと同期のデフォルトサポートを提供します。Redis OSS 2.8.22 で分岐なしの保存プロセスが導入されました。これにより、同期および保存中にスワップを使用することなく、アプリケーションにより多くのメモリを割り当てて使用することができます。詳細については、「[同期とバックアップの実装方法](Replication.Redis.Versions.md)」を参照してください。

**バージョン 2.8.22 より前の Redis OSS のスナップショットおよび同期**

ElastiCache for Redis OSS を使用する場合、Redis OSS は次のような多くのケースでバックグラウンドの書き込みコマンドを呼び出します。
+ バックアップのためのスナップショットを作成するとき。
+ レプリカとレプリケーショングループ内のプライマリを同期させるとき。
+ Redis OSS の AOF (Append-Only File) 機能を有効にするとき。
+ レプリカをプライマリに昇格するとき (プライマリ/レプリカの同期が実行される)。

Redis OSS がバックグラウンドの書き込みプロセスを実行するときは、常に、このプロセスのオーバーヘッドに対応するのに十分なメモリが利用できる必要があります。十分なメモリを利用できない場合、このプロセスは失敗します。このため、Redis OSS クラスターの作成時には、十分なメモリがあるノードインスタンスタイプを選択することが重要です。

## Valkey および Redis OSS でのバックグラウンド書き込みプロセスとメモリ使用量
<a name="BestPractices.BGSAVE.Process"></a>

バックグラウンド書き込みプロセスが呼び出されると、Valkey および Redis OSS は常にそのプロセスを生成 (フォーク) します (これらのエンジンはシングルスレッドであることを思い出してください)。1 つのフォークがデータをディスクの Redis OSS .rdb スナップショットファイルに永続化します。もう 1 つのフォークは、すべての読み取りと書き込みのオペレーションを処理します。スナップショットがポイントインタイムスナップショットであることを保証するために、すべてのデータの更新と追加が、データ領域とは別の使用可能なメモリ領域に書き込まれます。

データをディスクに保持しながら、すべての書き込みオペレーションを記録するのに十分なメモリが使用できる限り、メモリ不足の問題は発生しません。次のいずれかに該当する場合は、メモリ不足の問題が発生する可能性があります。
+ アプリケーションで頻繁に書き込みオペレーションが実行され、新しいデータや更新されたデータを受け入れるために使用可能なメモリが大量に必要になる。
+ 新しいデータや更新されたデータを書き込むために使用できるメモリが少なすぎる。
+ ディスクに永続化するのに長時間かかる大規模なデータセットがあり、大量の書き込みオペレーションが必要になる。

次の図は、バックグラウンド書き込みプロセス実行時のメモリの使用を示しています。

![イメージ: バックグラウンド書き込み中のメモリ使用の図。](http://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/dg/images/ElastiCache-bgsaveMemoryUseage.png)


バックアップを実行する際のパフォーマンスへの影響については、「[ノードベースのクラスターのバックアップがパフォーマンスに与える影響](backups.md#backups-performance)」を参照してください。

Valkey および Redis OSS がスナップショットを実行する方法の詳細については、[http://valkey.io](http://valkey.io) を参照してください。

リージョンとアベイラビリティーゾーンの詳細については、「[ElastiCache のリージョンとアベイラビリティーゾーンの選択](RegionsAndAZs.md)」を参照してください。

## バックグラウンド書き込み実行中のメモリ不足の回避
<a name="BestPractices.BGSAVE.memoryFix"></a>

`BGSAVE` または `BGREWRITEAOF` のようなバックグラウンド書き込みプロセスが呼び出されると、プロセスの失敗を防ぐためには、処理中の書き込みオペレーションが消費する量以上のメモリが必要となります。最悪のシナリオでは、バックグラウンド書き込みオペレーション中にすべてのレコードが更新され、新しいレコードがキャッシュに追加されます。そのため、Redis OSS バージョン 2.8.22 より前の場合は、`reserved-memory-percent` を 50 (50 パーセント) に設定し、Valkey および Redis OSS バージョン 2.8.22 以降の場合は 25 (25 パーセント) に設定することをお勧めします。

`maxmemory` 値は、データとオペレーションのオーバーヘッドで使用できるメモリを示します。デフォルトのパラメータグループの `reserved-memory` パラメータを変更することはできないため、クラスター用のカスタムパラメータグループを作成する必要があります。`reserved-memory` のデフォルト値は 0 です。この場合、Redis OSS はすべての *maxmemory* をデータ用に消費でき、バックグラウンド書き込みプロセスなどの他の用途に使用できるメモリがほとんど残されない可能性があります。ノードインスタンスタイプごとの `maxmemory` 値については、「[Redis OSS のノードタイプに固有のパラメータ](ParameterGroups.Engine.md#ParameterGroups.Redis.NodeSpecific)」を参照してください。

`reserved-memory` パラメータを使用して、ボックスで使用されるメモリ量を抑えることができます。

ElastiCache での Valkey および Redis 固有のパラメータの詳細については、「[Valkey および Redis OSS パラメータ](ParameterGroups.Engine.md#ParameterGroups.Redis)」を参照してください。

パラメータグループの作成と変更については、「[ElastiCache パラメータグループを作成する](ParameterGroups.Creating.md)」と「[ElastiCache パラメータグループを変更する](ParameterGroups.Modifying.md)」を参照してください。