CubicLouve

Spring_MTの技術ブログ

Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databasesを読む(その6 PERFORMANCE RESULTS)

6 PERFORMANCE RESULTS

2015年7月にGAとなったAuroraを本番環境で稼働させた際の経験を紹介する。

6.1 標準的なベンチマークでの結果

SysBenchやTPC-C 亜種などの業界標準ベンチマークを用いて、AuroraとMySQLの性能を比較する。

特に記載のない限り、32 vCPU、244 GBのメモリを持つ r3.8xlarge EC2インスタンス(インテルXeon E5-2670 v2 (Ivy Bridge) プロセッサー)を使い、30k IOPSのEBSボリュームがアタッチされているインスタンスを使う。

r3.8xlargeのバッファキャッシュは170GBに設定されてる

6.1.1 インスタンスサイズによるスケール

r3ファミリーの5つのEC2インスタンス(large、xlarge、2xlarge、4xlarge、8xlarge)で、1GBのデータセット(250テーブル)のSysBenchのread-only と write-only のベンチマークの結果。

インスタンスサイズに応じてCPU、メモリは倍々に増えていく。

旧世代のインスタンス - Amazon EC2 | AWS

この論文の時点では、AuroraはMySQL 5.6のコードベースとなっている。

f:id:Spring_MT:20210317105047p:plain

f:id:Spring_MT:20210317105110p:plain

Auroraのパフォーマンスは、インスタンスサイズが大きくなるごとに2倍になる、つまり、Auroraのスループットインスタンスサイズに応じてリニアにスケールすることがわかった。

r3.8xlargeでは121,000 write/sec、600,000 read/secを達成しました。

これは、r3.8xlargeでのMySQL 5.7の最高速度が20,000 read/sec、125,000 write/secであることと比較すると、大体5倍になる。

6.1.2 データサイズを変化させた場合のスループット

f:id:Spring_MT:20210317110740p:plain

SysBenchのwrite-onlyのベンチマーク結果。

データベースサイズが100GBの場合、AuroraはMySQLよりも最大67倍高速になる。

データベースサイズが1TBでキャッシュに乗り切らない場合でも、AuroraはMySQLよりも34倍高速である。

6.1.3 ユーザーのコネクション数のスケーリング

接続数が50→500→5000と増やしていく中での、SysBench OLTPベンチマークにおけるwrites/secの結果。

f:id:Spring_MT:20210317134035p:plain

Auroraが40,000 write/secから110,000 write/secまでスケールするのに対し、MySQLスループットは500接続前後でピークに達し、5000接続になると急激に低下する。

参考 : MySQL 8.0などの状況

yakst.com

6.1.4 レプリカのスケール

レプリ遅延についての結果。

レプリ遅延は、コミットされたトランザクションがレプリカで見えるようになるまでの時間で測定する。

f:id:Spring_MT:20210317140311p:plainf:id:Spring_MT:20210317140311p:plain

ワークロードが1,000から10,000 writes/secに増やしたときレプリ遅延をみる。

Auroraのレプリカラグは2.62 msから5.38 msに伸びる。

MySQLのレプリカラグは1000 ms以下から300000 msに延びる。

10,000 writes/secの状態では、AuroraのレプリカラグはMySQLのそれよりも数桁小さい。

6.1.5 行の競合が多い場合のスループット

TPC-C複雑な OLTP アプリケーションに対するベンチマーク

www.tpc.org

TPC-C All

https://japan.zdnet.com/glossary/exp/TPC-C/?s=4

sh2.hatenablog.jp

Perconaが提供しているTPC-C の亜種でベンチマークをとった。

github.com

f:id:Spring_MT:20210317142200p:plain

500 コネクション 10GB のデータから、 5000 コネクション 100GBのデータになるまでのスループットは、 MySQL 5.7と比較しAuroraは、2.3 倍から 16.3 倍のスループットがでる。

sh2.hatenablog.jp

6.2 実際のユーザーでの結果

6.2.1 Auroraでのアプリケーション応答時間

f:id:Spring_MT:20210317152650p:plain

とあるゲーム会社の例。

r3.4xlargeインスタンスMySQLからAuroraへの移行。

移行前のウェブトランザクションの平均応答時間は15msで、移行後の平均応答時間は5.5msへ。

6.2.2 Auroraでのレイテンシー

f:id:Spring_MT:20210317152854p:plain

f:id:Spring_MT:20210317152930p:plain

とある教育テクノロジー会社の例。 本番環境のワークロードをMySQLからAuroraに移行。

移行前のP95遅延は40 ms 〜 80 msの間で、P50の約1 msよりもはるかに悪い。

このアプリケーションでは、この論文の最初にあるような外れ値によるパフォーマンス低下の問題が発生していた。

移行後、SELECT、INSERT操作のP95は劇的に改善され、P50とほぼ同じになった。

(これそもそもDBの設定とかが悪い可能性もある)

6.2.3 複数のレプリカを使用した場合のレプリ遅延

MySQLのレプリカは、ライターに比べて大幅に遅延することが多く、PinterestのWeiner氏が報告しているように「変なバグを引き起こす可能性がある」とされている。 (単純に考慮もれとかじゃないのかなあ、、、)

medium.com

さきほどの教育テクノロジー会社では、レプリ遅延が12分になることもあり、アプリケーションの正確性に影響を与えるためレプリカはstand-byとしてしか使えていないかった。

Auroraに移行した後は、4つのレプリカの最大のレプリカラグが20msを超えることはなかった

f:id:Spring_MT:20210317154610p:plain

Auroraによってレプリカラグが改善されたことで、同社はアプリケーションの負荷の大部分をレプリカに振り向けることができ、コスト削減と可用性の向上を実現できた。

(うーーーーーん 単純にMySQLの設定とかアプリの書き方じゃないのかなあああ、参考にしてはだめな気がする)

参照

www.planetscale.com

ベンチマークの検証はよく考えよう