RDS(MySQL)で大量データを入れて性能試験を実施する必要があり、そのときに試行錯誤した結果、学んだことを残しておきます。
1. ストレージサイズは減らせない
AWSなので大量データを入れる時だけ増やして、終わったら元に戻せばいいやという考えで進めていたのですが、実はRDSはストレージサイズを減らせないことがわかりました。
一度割り当てたストレージサイズを縮小することはできません。
これは一時的にもう一つ環境を作るのが楽だと思います。手順はこれだけ。
- 既存のDBインスタンスのスナップショットをとる
- スナップショットから復元する
- アプリケーション側の接続定義を変える
2. 新環境に接続できない
これだけといいつつはまってしまいました。大量データとは直接は関係ないのですが、今回はアプリケーション側とVPCピアリングで接続しており、そちらから接続するためのプライベートIPを知る必要がありました。
これがどこに記載があるかわからない。。
かなりいろいろ調べた結果、RDSでもVPCでもなく、EC2のメニューにある「ネットワークインターフェース」で確認取れることがわかりました。(なんでEC2使ってないのにEC2にあるんだろう。。
3. 書込み速度に制限がかかる
環境を作ってデータを入れ始めるところまできました。
初めのほうはサクサク入っていきますが、途中で急に遅くなりました。
原因はこれです。
I/O クレジットおよびバーストパフォーマンス
汎用 (SSD) ストレージのパフォーマンスは、ボリュームサイズの影響を受けます。ボリュームサイズによって、ボリュームのベースパフォーマンスレベルや I/O クレジットを取得する速さが決まります。ボリュームサイズが大きいほどベースパフォーマンスレベルが高くなり、I/O クレジットの取得速度も速くなります。I/O クレジットとは、ベースレベルのパフォーマンスでは不十分な場合、大量の I/O をバーストする際に汎用 (SSD) ストレージで使用できる帯域幅を表します。ストレージが I/O に対して保持しているクレジットが多いほど、ベースパフォーマンスレベルを超えたバーストには時間がかかりますが、より高いパフォーマンスが必要な場合はボリュームのパフォーマンスが向上します。
汎用 (SSD) ストレージを使用した場合、DB インスタンスは、初期 I/O クレジットバランス(5,400,000 I/O クレジット)を受け取ります。これは、30 分間で 3,000 IOPS という最大バーストパフォーマンスを持続するには十分な数のクレジットです。この初期クレジットバランスは、ブートボリュームでの高速な初期起動サイクル、および他のアプリケーションでの優れたブートストラップエクスペリエンスを実現するために設計されました。ストレージは、ボリュームサイズの 1 GB あたり 3 IOPS というベースパフォーマンスレートで、I/O クレジットを毎秒取得します。たとえば、100 GB の汎用 (SSD) ストレージではベースパフォーマンスは 300 IOPS になります。
どういうことなのか遅くなるまで理解できていなかったのですが、
- ある程度(クレジットの範囲まで)は高いパフォーマンスで動く
- それ以降はベースパフォーマンスに制限される
- ストレージ容量に応じてパフォーマンスは向上する
ということらしいです。
たとえば、100Gのデータを入れるからと言って、100Gの容量を用意しているだけだと入れるのはかなり遅くなります。300Gの容量にしておくと3倍の速さで入れることができます。
これらのパフォーマンスは、マネジメントコンソールからモニタリングビュー「Write Operations (Count/Second)」を見るとよくわかります。
まとめ
自分でやってみてハマったからこそ身に付くんですよね。いい経験した!