RDB as a Serviceのベンチマーク

created at 2018/07/02 09:18:37

はじめに

最近古くなった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

tpcc-mysql-50.png (15.3 kB)

tpcc-mysql-100.png (13.4 kB)

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

sysbench

oltp_read_write-10k.png (18.3 kB)

oltp_read_write-100k.png (18.8 kB)

oltp_read_write-1m.png (17.4 kB)

IDCFはデフォルトでmax_connectionsが151だったのでThreads = 256は計測できていません。ちなみに、RDSは5100、Auroraは3000、Cloud SQLは4000でした。

まとめ

IDCFめっちゃ速いですね。
Auroraもさすがという感じで、ある程度トラフィックがあるようなサービスだとコスパ的にもわざわざAWSでRDSを選択する意味はあまりなさそうです。
Cloud SQLは概ねRDSよりはやくて、特にデータが多くて同時接続数が多いときが得意そうです。


  1. 厳密ではないらしい