RDB as a Serviceのベンチマーク
はじめに
最近古くなった Web アプリケーションインフラの刷新プロジェクトをやっていて、AWS と GCP それぞれのパフォーマンスが気になっていたところに IDCF の RDB サービスがリリースされたのでベンチマークを取ってみました。
ベンチマークしたのサービスは以下の 4 つで、すべて MySQL 互換です。
ベンチマークログ、Terraform のコードは次のレポジトリにあります。
https://gitlab.com/nownabe/rdb-bench
TL; DR
おおむね、
IDCF > Aurora > Cloud SQL > RDS
でした。IDCF はやい。
ベンチマーク方法
ベンチマークツールは tpcc-mysql と sysbench を使いました。MySQL のパラメータはすべてサービスのデフォルトのままです。また、それぞれ計測は 1 回のみとなります。
構築
それぞれのクラウドで RDB のインスタンスとベンチマークをかけるクライアントとなる VM インスタンスを立ち上げました。
AWS と GCP の構築は Terraform で自動化してあります。
https://gitlab.com/nownabe/rdb-bench/tree/master/terraform
tpcc-mysql
tpcc-mysql は Percona が提供しているベンチマークツールで、TPC-C というベンチマーク仕様の実装です。1
tpcc-mysql では以下の設定で計測をしました。
- Warehouse は 50, 100
- 同時接続数は 20, 40, 60, 80, 100
- ウォーミングアップ時間は 300 秒
- 計測時間は 600 秒
https://gitlab.com/nownabe/rdb-bench/blob/master/run-tpcc.sh
sysbench
sysbench は Lua スクリプトでベンチマークを定義できるベンチマークツールです。CPU やメモリなどに加えて、MySQL と PostgreSQL の性能も計測できます。
sysbench では以下の設定で計測をしました。
- シナリオは oltp_read_write.lua
- Table size は 10k, 100k, 1m
- Threads は 2, 4, 8, 16, 32, 64, 128, 256
- 計測時間は 300 秒
https://gitlab.com/nownabe/rdb-bench/blob/master/run-sysbench.sh
結果
細かい結果が気になる方はレポジトリにログが全部あるので見てみてください。
インスタンスタイプ
それぞれのサービスで次の表のインスタンスタイプを使いました。
| サービス | タイプ | vCPU | Memory |
|---|---|---|---|
| RDS | db.r4.2xlarge | 8 | 61 |
| Aurora | db.r4.2xlarge | 8 | 61 |
| Cloud SQL | db-n1-highmem-8 | 8 | 52 |
| IDCF RDB | highmem.XL64 | 8 | 64 |
tpcc-mysql


RDS はデータのロードがおそすぎて待ち時間がやばかったので Warehouse = 100 は計測してません。
sysbench



IDCF はデフォルトで max_connections が 151 だったので Threads = 256 は計測できていません。ちなみに、RDS は 5100、Aurora は 3000、Cloud SQL は 4000 でした。
まとめ
IDCF めっちゃ速いですね。 Aurora もさすがという感じで、ある程度トラフィックがあるようなサービスだとコスパ的にもわざわざ AWS で RDS を選択する意味はあまりなさそうです。 Cloud SQL は概ね RDS よりはやくて、特にデータが多くて同時接続数が多いときが得意そうです。
Footnotes
-
厳密ではないらしい ↩