ストレージの Auto Scaling を有効化したのに Amazon RDS DB インスタンスのストレージ容量が少ない、または DB インスタンスが Storage-Full 状態なのはなぜですか?

最終更新日: 2020 年 3 月 5 日

Amazon Relational Database Service (Amazon RDS) DB インスタンスに対してストレージの Auto Scaling を有効にしたのですが、ストレージの空き容量が 10% 未満、またはインスタンスが Storage-Full 状態になっています。このような問題が発生する理由と、解決方法を教えてください。

簡単な説明

最近手動で、または Auto Scaling によって RDS DB インスタンスのストレージを増加させた場合、DB インスタンスがストレージ最適化を完了してから 6 時間 (クールダウン期間) は、インスタンスのストレージを変更できません。ストレージ変更のクールダウン期間は操作が終了した後でしか開始されず、ストレージ最適化の完了には数時間かかる場合があるため、クールダウン期間は合計で 6 時間を超えることがあります。ストレージの空き容量が 10% 未満であっても、ストレージ変更のクールダウン期間中は、Auto Scaling で DB インスタンスのストレージを増加させることはできません。詳細については、「DB インスタンスストレージの容量を増加する」を参照してください。

Auto Scaling を使用して RDS DB インスタンスのストレージを増加させた場合、ストレージは 5 GiB、現在割り当てられているストレージの 10%、または過去 1 時間の FreeStorageSpace メトリクスに基づいて予測された増加量のうち最大の値を使って増加されます。

データロードの増加が予想される場合は (RDS DB インスタンスの現在のストレージサイズの 20% を超えるロードなど)、データロードの前に RDS DB ストレージのサイズを手動で増加させることがベストプラクティスです。たとえば、RDS DB インスタンスのストレージサイズが 100 GiB で 10.1 GiB の空き容量があり、ストレージの消費量が通常 1 時間あたり 100 MB の場合、Auto Scaling はストレージを 10% (10 GiB) 増加させますが、1 時間未満に 50 GiB のデータをロードする予定の場合、10% のストレージ増加では不十分です。また、以前の Auto Scaling 操作がストレージ変更のクールダウン期間中であるため、RDS DB インスタンスには少なくとも 6 時間ストレージ変更を行うことができず、その結果 RDS DB インスタンスが数時間 Storage-Full ステータスになります。

解決方法

RDS DB インスタンスのストレージサイズを増やすことができない場合は、まずインスタンスがストレージ変更のクールダウン期間の影響を受けていることを示す次の状態をチェックしてください。

  • RDS DB インスタンスのステータスが Storage-optimization になっている。
  • RDS DB インスタンスのステータスが Storage-full または Available になっているが、最近ストレージの変更が行われた。最近ストレージの増加操作が実行されたことを確認するには、RDS DB インスタンスのイベントで「Finished applying modification to allocated storage」または「Finished applying autoscale initiated modification to allocated storage」というメッセージをチェックします。 クールダウン期間はストレージの最適化が完了してから開始され、この操作の終了には数時間かかる場合があるため、過去 24 時間におけるストレージの変更をチェックすることが推奨されます。

最近ストレージの変更が行われ、クールダウン期間が経過するまで待機できない場合は、より多くの Amazon Elastic Block Store (Amazon EBS) ストレージを有する新しい RDS DB インスタンスにデータベースを復元できます。ただし、RDS DB インスタンスが Storage-full 状態の場合は、まず RDS DB インスタンスにおけるデータロードをすべて停止する必要があります。その後、データベースエンジンのプロセスに従って RDS DB インスタンスからストレージ容量を解放できます。RDS DB インスタンスのデータロードをすべて停止した後は、Amazon RDS オートメーションもログファイルによって使用されている容量の解放を試みますが、このプロセスは、インスタンスの Storage-full 状態が解消されるまで数分から数時間かかる場合があります。

RDS DB インスタンスが Storage-full 状態ではない場合は、次の方法のいずれかを使用して、DB インスタンスのストレージサイズを増加させることができます。

  • オプション 1: RDS DB インスタンスのリードレプリカを作成して昇格させる
  • オプション 2: 手動で DB スナップショットを作成し、RDS DB インスタンスを所定の時点に復元する

どちらのオプションもデータベースのダウンタイムが発生しますが、ダウンタイムはリードレプリカを作成して昇格させるほうが短くなります。Amazon RDS のリードレプリカは、MySQL、MariaDB、および PostgreSQL の各エンジンの全バージョンでサポートされています。Oracle データベースインスタンスについては、Oracle Enterprise Edition のバージョン 12.1.0.2.v10 以降のみでリードレプリカがサポートされます。Oracle リードレプリカを使用するには、Active Data Guard ライセンスが必要です。

オプション 1: RDS DB インスタンスのリードレプリカを作成して昇格させる

  1. RDS DB インスタンスのリードレプリカを作成します (レプリカをまだ作成していない場合)。
  2. 手動でリードレプリカのストレージ容量を増加させます。リードレプリカでは、Amazon RDS ストレージの Auto Scaling がデフォルトで無効化されています。
  3. アクティブな RDS DB インスタンスの名前を異なる名前に変更して、すべての着信トラフィックを停止します。
  4. アクティブな RDS DB インスタンスによって以前使用されていた名前にリードレプリカの名前を変更します。これにより、リードレプリカのエンドポイントがアクティブな RDS DB インスタンスと同じになるため、アプリケーションを再設定する必要がなくなります。
  5. リードレプリカを昇格させます

注意: アプリケーションまたはクライアントには、ステップ 3~5 でデータベースのダウンタイムが発生します。

オプション 2: 手動で DB スナップショットを作成し、RDS DB インスタンスを所定の時点に復元する

  1. アクティブな RDS DB インスタンスの名前を変更して、すべての着信トラフィックを停止します。これは、RDS DB インスタンスが Storage-full 状態になるのを防ぎます。RDS DB インスタンスが Storage-full 状態の場合、次のステップに進んで手動スナップショットを作成することはできません。
  2. RDS DB インスタンスの DB スナップショットを作成します。復元された RDS DB インスタンスがストレージ変更のクールダウン期間の影響を受けないようにするには、新しいスナップショットを作成する必要があります。
  3. 直近の復元可能な時刻を選択して、RDS DB インスタンスを所定の時点に復元します。インスタンス識別子には、アクティブな RDS DB インスタンスが使用していた名前を入力します。注意: クールダウン期間を生じる Auto Scaling 増加が起こらないようにするため、現時点では Auto Scaling を有効化しないでください。
  4. オプションで、復元された RDS DB インスタンスを変更してカスタムセキュリティグループを含めます。新しい RDS DB インスタンスにはデフォルトのデータベースセキュリティグループが適用されます。カスタムセキュリティグループを使用する場合は、この時点で設定してください。
  5. 手動で新しい RDS DB インスタンスのストレージ容量を増加させます

注意: アプリケーションまたはクライアントには、ステップ 1~4 でデータベースのダウンタイムが発生します。