PostgreSQLエンジンでのAuroraとRDSのベンチマーク

PostgreSQLエンジンでAuroraとRDSでpgbenchを使った負荷テストを行った。

テスト環境

クライアント

#!/bin/bash
. .rds
for i in 8 16 32 48 64; do
  echo "--- $(date +%FT%TZ) RDS $i"
  pgbench -i -s 100 -q
  pgbench -c $i -T 210
  sleep 60
done
echo "--- $(date +%FT%TZ) RDS end"

サーバ

  • PostgreSQL 13.6
  • インスタンス数はそれぞれ1台ずつ(冗長化なし)
  • Parameter Groupはデフォルト
  • クライアントインスタンスと同じAZ
  • Encryption有効
  • Performance Insights有効
  • Enhanced Monitoring有効
  • ログはエクスポートしていない
  • RDSのストレージはgp2/1000GB

結果

docs.google.com

tps

latency

CPU使用率

Performance Insights(それぞれdb.r6.2xlarge)

RDS

Aurora

雑感

  • 実際のワークロードに合わせたテストでないとプロダクション投入時の性能はなんともいえないと思う…と前置きしつつ
  • Auroraのtps限界が想定よりずいぶん低い
  • Auroraには可用性やフェイルオーバーの速さなどのメリットがあるが、うーん…
  • Auroraのアーキテクチャ的に細かいトランザクションが多いワークロードでは遅くなりそうな気はする
  • ただ、MySQLエンジンではこんなワークロードでもAurora > RDSだったのでPostgreSQLエンジンでも同様だと思っていた
  • Googleで調べた感じAuroraのほうがtpsが高い結果が見られるので、なにか設定を間違えている気もする…
  • インスタンスクラスをもっと大きくしたら結果が違うのかもしれない
  • RDSのストレージサイズによる性能の違いも調べたいところ

参考リンク

追記

RDSがSingle-AZだったのでMulti-AZで追試。

tps

latency

CPU使用率

Performance Insights(db.r6.2xlarge)

追記2

MySQLエンジンでTPC-B(tpcb-like)を軽く検証したので、結果を張っておく。

ツールが違うのでPostgreSQLエンジンの値とは直接比較できない点に注意のこと