Amazon Relational Database Service (Amazon RDS) DB インスタンスでストレージの自動スケーリングを有効にしましたが、空きストレージ容量が 10% 未満になったり、インスタンスが storage-full 状態になったりします。
簡単な説明
DB インスタンスのストレージを変更すると、その DB インスタンスは storage-optimization 状態に移行します。ストレージの最適化は通常、完了するまでに数分かかりますが、24 時間以上かかる可能性もあります。プロセスの監視には、Amazon Elastic Compute Cloud (Amazon EC2) コンソールを使用します。
注: 最後のストレージ変更から 6 時間、またはストレージ最適化の完了のうち、長い方の時間が経過するまでは、追加のストレージ変更はできません。
ストレージ最適化中は、空きストレージ容量が 10% 未満であっても、自動スケーリングでは DB インスタンスのストレージを増やすことはできません。
自動スケーリングを使用して DB インスタンスのストレージを増やすと、追加のストレージは、次のうち最も大きい値で増加します。
- 10 GiB
- 現在割り当てられているスペースの 10%
- 過去 1 時間のFreeStorageSpace メトリクスに基づく。予測される 7 時間分のストレージ増加
1 時間以内に 50 GB のデータをロードする場合、ストレージを 10% 増やすだけでは不十分です。前回の自動スケーリング操作は storage-optimization 状態になっているため、プロセスが完了するまでは DB インスタンスでストレージを変更できません。その結果、DB インスタンスが最長で数時間 storage-full ステータスになる可能性があります。
解決策
RDS DB インスタンスのストレージを変更できない場合は、インスタンスのステータスを確認します。DB インスタンスの状態が storage-full または available である場合は、直近 6 時間にストレージの変更が発生したかどうかを確認します。ストレージ増加操作が最近実行されたかどうかを確認するには、DB インスタンスのイベントに次のメッセージがないか確認します。
「Finished applying modification to allocated storage」 (割り当てたストレージに変更を適用しました)
または、
「Finished applying autoscaling-initiated modification to allocated storage」 (割り当てたストレージに、自動スケーリングが起動した変更を適用しました)
DB インスタンスの状態が storage-optimization である場合は、大容量の Amazon Elastic Block Store (Amazon EBS) ストレージを持つ DB インスタンスにデータベースを復元します。
注: DB インスタンスが storage-full 状態の場合、最初に DB インスタンスへのデータロードをすべて停止する必要があります。このプロセスでは、インスタンスが storage-full 以外の状態になるまでに数分から数時間かかる可能性があります。
DB インスタンスが storage-full 状態ではない場合は、次のいずれかの方法で DB インスタンスのストレージサイズを変更します。
- オプション 1 DB インスタンスのリードレプリカを作成してプロモートします。
- オプション 2 手動で DB スナップショットを取り、指定した時点に DB インスタンスを復元します。
- オプション 3 FreeStorageSpace が少なくなっているため、自動スケーリングを無効化します。
注: オプション 1 と 2 では、データベースでダウンタイムが発生します。ただし、オプション 1 の方がオプション 2 よりもダウンタイムが短くなります。リードレプリカは、MariaDB、Microsoft SQL Server、MySQL、Oracle、PostgreSQL DB エンジンでサポートされています。
RDS DB インスタンスのリードレプリカを作成してプロモートする
次の手順を実行します。
- DB インスタンスのリードレプリカを作成します。
- リードレプリカのストレージ容量を増やします。デフォルトでは、Amazon RDS ストレージの自動スケーリングはリードレプリカでは無効になっています。
- アクティブな DB インスタンスの名前を別の名前に変更します。変更すると、受信トラフィックが停止します。
- リードレプリカの名前を、アクティブな DB インスタンスに使用していた名前に変更します。変更すると、リードレプリカのエンドポイントがアクティブな DB インスタンスと同じになり、アプリケーションを再設定する必要がなくなります。
- リードレプリカをプロモートします。
注: アプリケーションまたはクライアントでは、ステップ 3 ~ 5 の間にデータベースのダウンタイムが発生します。
手動 DB スナップショットを取り、RDS DB インスタンスを指定した時点に復元する
次の手順を実行します。
- アクティブな DB インスタンスの名前を変更して受信トラフィックを停止させ、storage-full 状態にならないようにします。DB インスタンスが storage-full 状態の場合は、次のステップに進むことはできません。
- DB インスタンスの DB スナップショットを作成します。
注: スナップショットは、復元された DB インスタンスが storage-optimization のストレージ変更イベントにより影響を受けることを防ぎます。
- DB インスタンスをある時点に復元するには、復元可能な最新の時刻を選択します。インスタンス識別子には、アクティブな DB インスタンスが使用していた名前を入力します。
注: 自動スケーリングによる storage-optimization の発生を防ぐために、自動スケーリングは有効にしないでください。
- (オプション) 復元した DB インスタンスを変更し、カスタムセキュリティグループを含めます。デフォルトのデータベースセキュリティグループが新しい DB インスタンスに適用されます。
- 新しい DB インスタンスのストレージ容量を増やします。
注: アプリケーションまたはクライアントでは、ステップ 1 ~ 4 の間にデータベースのダウンタイムが発生します。
FreeStorageSpace が少なくなっているため、自動スケーリングを無効化する
自動スケーリングを無効にすると、追加のストレージは自動的に割り当てられません。ストレージ割り当てを手動で制御できます。たとえば、自動スケーリングではストレージが 10% 増加するものの、自動スケーリングイベントが開始される前に 10% 以上追加する必要があると仮定します。このシナリオでは、自動スケーリングを無効にします。
自動スケーリングを無効にするには、次の手順を実行します。
- Amazon RDS コンソールを開きます。
- ナビゲーションペインで [データベース] を選択し、該当するデータベースを選択します。
- [変更] を選択します。
- [ストレージ] の [追加のストレージ設定] で [ストレージの自動スケーリングを有効にする] を選択解除します。
- [続行] を選択します。
- [すぐに適用] または [次回の定期メンテナンス時間中に適用] を選択します。
- [DB インスタンスの変更] を選択します。
注: FreeStorageSpace メトリクスが 5 分以上にわたって 10% 未満になると、自動スケーリングが開始されます。Auto Scaling は、最後のストレージ変更 (storage-modification) から 6 時間以上経過したときか、インスタンスでストレージの最適化 (storage-optimization) が完了したときのうち、長い方の時間が経過したときにも開始されます。
関連情報
Amazon RDS for PostgreSQL で「No space left on device」や「DiskFull」というエラーが発生する理由を知りたいです
Amazon RDS for Oracle DB インスタンスが想定よりも多くのストレージを使用している理由を教えてください
Amazon RDS for MySQL インスタンスが想定よりも多くのストレージを使用している理由を教えてください
Amazon RDS for SQL Server DB インスタンスのストレージ消費を最適化する方法を教えてください