LoginSignup
19
13

More than 5 years have passed since last update.

RDSへ大量データを入れようとしたらハマった話

Last updated at Posted at 2016-03-08

RDS(MySQL)で大量データを入れて性能試験を実施する必要があり、そのときに試行錯誤した結果、学んだことを残しておきます。

1. ストレージサイズは減らせない

AWSなので大量データを入れる時だけ増やして、終わったら元に戻せばいいやという考えで進めていたのですが、実はRDSはストレージサイズを減らせないことがわかりました。

一度割り当てたストレージサイズを縮小することはできません。

これは一時的にもう一つ環境を作るのが楽だと思います。手順はこれだけ。

  1. 既存のDBインスタンスのスナップショットをとる
  2. スナップショットから復元する
  3. アプリケーション側の接続定義を変える

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)」を見るとよくわかります。

まとめ

自分でやってみてハマったからこそ身に付くんですよね。いい経験した!

19
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
13