こんにちは、ちゃりおです。
今回は、RDSのストレージ拡張についてです。
RDSしばらく運用していくと、ストレージが足りなくなることもあるかと思います。
ストレージ拡張する際に、知っておきたいことについてです。
ストレージ圧迫の原因は?
まずは、原因の調査です。
AWSの以下の記事が参考になります。
- フラグメンテーションが使用している容量
- アプリケーションテーブルが使用している容量
について調査する方法が書いています。
予想よりも多くのストレージを使用している Amazon RDS MySQL DB インスタンスに関する問題を解決する方法を教えてください。
フラグメンテーションについて
フラグメンテーション、断片化とは、コンピュータ上のメモリの管理上の一単位が、そのままでは有効利用できない状態になることを言う。 具体的には、使用中のメモリ領域がわずかな大きさの未使用領域を挟んで飛び飛びに配置され、連続した未使用領域が大きく確保できなくなる状態を言う。
mysqlだと、data_freeの列がフラグメンテーションにあたります。
ゴミが溜まっているような状態で、ストレージを消費します。
OPTIMIZE TABLEを実行することで、ストレージを開放できます。
OPTIMIZE TABLE <テーブル>;
Mysql5.7以降はオンラインDDLで実行できるため、サービスに影響がありません。
RDSでの注意点としては、「information_schema」には行なえません。
おそらく、マネージドサービスのため制限されているのだと思います。
DB再起動すれば、「information_schema」内のdata_free列が少なくなるのが確認できました。
必ずdata_free列が0になるわけではないので、どれくらい空くかの試算時に気をつけたいです。
ストレージの追加
RDS ストレージの追加
RDSのストレージ追加にはダウンタイムは発生しません。
ほとんどの場合、ストレージのスケーリングには停止が必要ではなく、サーバーのパフォーマンスを低下させません。DB インスタンスのストレージサイズを変更すると、DB インスタンスのステータスは [ストレージの最適化] になります。ストレージ変更後、DB インスタンスは完全に動作します。
注記
インスタンスでストレージの最適化が完了してから 6 時間後まではストレージをこれ以上変更することはできません。ただし、特別なケースとして、SQL Server DB インスタンスを所有しているが、2017 年 11 月以降にストレージ設定を変更していない場合があります。この場合、割り当てられたストレージを増やすように DB インスタンスを変更すると、数分の短い停止時間が発生する場合があります。停止後、DB インスタンスはオンラインですが、storage-optimization 状態になります。ストレージ最適化中にパフォーマンスが低下することがあります。
Amazon RDS DB インスタンスのストレージを使用する
ちなみに、RDS for Mysqlのストレージ料金は「毎月 0.276USD/GB」(東京リージョン MultiAZ 2020/09/19時点)です。
100GB拡張しても、3000円/月くらいです。
ちなみに、ストレージはAuroraのほうが安いです。
「毎月 0.12USD/GB」(東京リージョン MultiAZ 2020/09/19時点)
ストレージ容量のAutoScalingの設定の有効化
こちらも上記と同様にダウンタイムは発生しません。
動作は、ストレージ容量が残り10%未満になったときに10%増やします。
注意点は、ストレージの最適化が完了してから6時間後まではストレージを変更できないことです。
引っかかることは少ないと思いますが、AutoScaling後6時間の間に10%未満になってもAutoScalingは実行されません。
まとめ
今回は、RDSのストレージ追加する際に確認しておきたいことでした。
AutoScalingは有効化しておいて、急激に減った際はSQL叩いて調べるのがいいと思います。
定期的に不要なテーブルがないか・フラグメンテーションが発生していないかを調べることで料金節約につながります。
ストレージの追加もフラグメンテーションの最適化(Mysql5.7以降)もサービス影響なしでできるのは嬉しいです。