Aurora は RDS MySQL と比較して「優れている」と言われることが多い気がします。
ただ、その文脈のほとんどは、
- 分散ストレージによる耐障害性
- フェイルオーバー時間の短縮
- Reader による読み取りスケールアウト
といった、冗長構成や可用性に関するものです。
一方で、「単体のデータベースとしてどの程度の処理性能を持っているのか?」という点については、 意外と具体的な話を聞く機会がありません。
Aurora はアーキテクチャ的に RDS MySQL とはかなり異なる実装になっているため、 もしかするとそのオーバーヘッドが OLTP ワークロードでは不利に働く可能性もあります。
実際のところどうなのか。
これまで自分では試したことがなかったので、 まずは同一インスタンスクラス上で MySQL (RDS) と Aurora MySQL を並べて、 純粋な処理性能にどの程度の差があるのかを確認してみることにしました。
本記事では sysbench を使用し、OLTP ベンチマークを実施した結果をまとめます。
動作環境
| Engine | Instance | vCPU | Memory |
|---|---|---|---|
| MySQL (RDS) | db.t3.medium | 2 | 4 GiB |
| Aurora MySQL | db.t3.medium | 2 | 4 GiB |
※ 両者とも Network Performance: Up to 2,085 Mbps
sysbench バージョン
sysbench 1.1.0-3ceba0b
テスト条件
- テーブル数: 10
- レコード数: 1,000,000 / table
- スレッド数: 50
- 実行時間: 60秒
テスト結果
oltp_read_write(読み書き混在)
| Engine | TPS | QPS | Avg Latency(ms) | 95% Latency(ms) |
|---|---|---|---|---|
| MySQL | 608.56 | 12171.16 | 82.12 | 123.28 |
| Aurora (Writer) | 475.99 | 9519.73 | 104.85 | 183.21 |
MySQL の方が
- TPS: 約 +27%
- 平均レイテンシ: 約 -22ms
oltp_read_only(読み取り中心)
| Engine | Endpoint | TPS | QPS | Avg Latency(ms) | 95% Latency(ms) |
|---|---|---|---|---|---|
| MySQL | - | 942.00 | 15072.08 | 53.06 | 73.13 |
| Aurora | Reader | 754.65 | 12074.46 | 66.16 | 155.80 |
| Aurora | Writer | 825.61 | 13209.81 | 60.51 | 130.13 |
Reader endpoint 使用時は
- TPS: 約 -20%
- 95% latency は 2倍以上
oltp_point_select(単一行 SELECT)
QPS 上限の目安を見るテスト。
| Engine | Endpoint | QPS | Avg Latency(ms) | 95% Latency(ms) |
|---|---|---|---|---|
| MySQL | - | 23709.21 | 2.11 | 3.96 |
| Aurora | Reader | 20833.79 | 2.40 | 5.18 |
| Aurora | Writer | 21530.10 | 2.32 | 4.82 |
Aurora は
- 約 -10〜12% 程度のスループット低下
所感メモ
今回の条件では、
Aurora の方が一貫して遅い
という結果になりました。
特に
- 読み書き混在(oltp_read_write)
- Aurora Reader Endpoint
での差が大きく、
95% latency が顕著に悪化
しています。
これは Aurora の
- 分散ストレージへの書き込み同期
- ネットワーク越しのログ適用
- Reader endpoint の読み取り整合性制御
などのオーバーヘッドが、 低スペックインスタンス(t3.medium)では 無視できないコストとして現れている可能性があります。
Aurora は「速い」のか?
Aurora は
- フェイルオーバー高速化
- Reader スケールアウト
- ストレージ耐障害性(6-way replication)
などの 可用性・運用性のメリット を提供しますが、
単一ノードの OLTP ワークロードにおける 純粋なスループットでは RDS MySQL に劣るケースもある
ということが確認できました。
Aurora を選定する際には、
- 可用性
- スケーラビリティ
- 運用負荷
といった非機能要件と、
単体ノード性能のトレードオフ
を踏まえて判断する必要がありそうです。