RDSのGeneral Purpose (SSD)対応をベンチマークしてみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

ウィスキー、シガー、パイプをこよなく愛する大栗です。 先日RDSでGeneral Purpose (SSD) Storageが選択可能になりました。

高速なSSDが使用可能になったためベンチマークしてみました。以前と同様にRDSのベンチバークをしてみました。

General Purpose (SSD) Storageとは?

General Purpose (SSD) Storageとは通称gp2と呼ばれ、最大で3,000 IOPSの性能を発揮でいるSSDストレージです。「最大」という所がポイントです。本来の性能はディスクサイズ(GB)の3倍のIOPSの性能になるのですが、I/O クレジットを貯める事でI/Oを3,000IOPSまでバーストできます。

ディスクの種類にはMagnetic (Standard)、General Purpose (SSD)、Provisioned IOPSがありますが、General Purpose (SSD)はコストパフォーマンスが良いディスクになります。特定の条件では、以下の様にMagnetic(Standard)より低価格の場合もあります。

ディスクの種類 価格(Single-AZ) (2014/10/19時点) 価格(Multi-AZ) (2014/10/19時点)
Magnetic (Standard) $153.984 / 月 $276.864 / 月
General Purpose (SSD) $141.312 / 月 $282.624 / 月
Provisioned IOPS $513.600 / 月 $1027.200 / 月

※ディスクサイズ:1000 GB、平均負荷(I/O):100 IOPS、割当性能(I/O):3000 IOPS(Magneticは100〜200 IOPS)の場合

ベンチマーク環境

ベンチマークの種類

RDBMSのベンチマークで一般的なTPCのオンライントランザクション処理の指標である「TPC-C」を行います。 ベンチマーク用ツールはMySQLのOracle ACEである平塚氏が作成したJdbcRunnerのTPC-C簡易実装であるTiny TPC-Cを使用します。

使用データ

使用データは以下のコマンドでロードしています。

java JR scripts\tpcc_load.js -nAgents 8 -param0 100

"-param0"に100を指定しているので、データ件数は以下になります。

Table Records
warehouse 100
district 1000
customer 3,000,000
history 3,000,000
item 10,000,000
stock 10,000,000
orders 3,000,000
new_orders 900,000
order_line 30,000,000 (approx.)

ベンチマーク対象

ベンチマーク対象は以下の以下の3タイプです。General Purpose (SSD)の性能(3000 IOPS)に準ずる様にストレージを設定しました。

ストレージ ディスクサイズ IOPS
Magnetic (Standard) 100 GB 100〜200 IOPS
General Purpose (SSD) 1000 GB 3000 IOPS
Provisioned IOPS 100 GB 3000 IOPS

RDSは以下の状態で、ベンチマークを実施しています。

インスタンスクラス DB Engine Version 備考
db.t2.small MySQL 5.6.19 現在5.6.19はセキュリティ脆弱性の情報が出ています。 5.6.21以上を使用しましょう。

※RDSとベンチマーク用クライアントは同一Zoneに配置しています。

ベンチマーク内容

ベンチマークはTiny TPC-Cの多重度を以下の様に1、4、16、64で実行させてパフォーマンスを計測します。

java JR scripts\tpcc.js -nAgents 1
java JR scripts\tpcc.js -nAgents 4
java JR scripts\tpcc.js -nAgents 16
java JR scripts\tpcc.js -nAgents 64

結果

各々の多重度でベンチマークを計測します。

多重度:1

パフォーマンス

ディスクの種類 Throughput(tps) Response Time (90%tile) (ms)
New-Order Payment Order-Status Delivery Stock-Level New-Order Payment Order-Status Delivery Stock-Level
Magnetic (Standard) 2.8 2.8 0.3 0.3 0.3 264 113 104 704 1260
General Purpose (SSD) 16.5 16.5 1.7 1.7 1.7 49 20 9 77 111
Provisioned IOPS 16.6 16.6 1.7 1.7 1.7 47 19 9 77 105

 負荷状況

ディスクの種類 CPU使用率 Read IOPS Write IOPS
Magnetic (Standard) 6.15 139.86 155.23
General Purpose (SSD) 23.28 488.44 589.99
Provisioned IOPS 23.94 488.18 635.72

 

多重度:4

 パフォーマンス

ディスクの種類 Throughput(tps) Response Time (90%tile) (ms)
New-Order Payment Order-Status Delivery Stock-Level New-Order Payment Order-Status Delivery Stock-Level
Magnetic (Standard) 10.2 10.2 1.0 1.0 1.0 291 127 112 444 1618
General Purpose (SSD) 43.4 43.4 4.3 4.3 4.3 105 43 21 164 193
Provisioned IOPS 44.7 44.7 4.5 4.5 4.5 98 40 21 150 196

 負荷状況

ディスクの種類 CPU使用率 Read IOPS Write IOPS
Magnetic (Standard) 15.92 302.94 361.81
General Purpose (SSD) 54.90 1072.51 1230.34
Provisioned IOPS 57.55 1101.47 1395.79

 

多重度:16

パフォーマンス

ディスクの種類 Throughput(tps) Response Time (90%tile) (ms)
New-Order Payment Order-Status Delivery Stock-Level New-Order Payment Order-Status Delivery Stock-Level
Magnetic (Standard) 15.3 15.3 1.5 1.5 1.5 751 400 274 1507 2809
General Purpose (SSD) 61.4 61.4 6.1 6.1 6.1 224 81 39 367 293
Provisioned IOPS 60.4 60.4 6.0 6.1 6.0 229 81 41 393 307

 負荷状況

ディスクの種類 CPU使用率 Read IOPS Write IOPS
Magnetic (Standard) 21.69 362.30 358.94
General Purpose (SSD) 75.62 1517.93 1565.11
Provisioned IOPS 74.79 1493.98 1642.80

 

多重度:64

パフォーマンス

ディスクの種類 Throughput(tps) Response Time (90%tile) (ms)
New-Order Payment Order-Status Delivery Stock-Level New-Order Payment Order-Status Delivery Stock-Level
Magnetic (Standard) 16.2 16.2 1.6 1.6 1.6 3058 1579 890 5023 8031
General Purpose (SSD) 61.2 61.2 6.1 6.1 6.1 1086 280 188 1774 1520
Provisioned IOPS 58.5 58.5 5.8 5.8 5.8 1162 274 206 1909 1645

 負荷状況

ディスクの種類 CPU使用率 Read IOPS Write IOPS
Magnetic (Standard) 22.46 351.85 239.09
General Purpose (SSD) 78.95 1375.94 1392.88
Provisioned IOPS 78.36 1363.88 1439.52

 

まとめ

General Purpose (SSD)とProvisioned IOPSは設定した性能通りほぼ同等の性能が出ています。Read IOPS + Write IOPS = 3,000程度で頭打ちとなりました。ディスクI/Oにボトルネックがある場合は、まずGeneral Purpose (SSD)で1000GB以上のディスクを設定するのがコスト的に良いと思います。

最後に

実は、最初の計測ではディスクサイズをケチってしまい、計測途中でI/O クレジットが枯渇してスループットが大幅に落ちたためディスクサイズを1000GBに変更して再計測しました。DBサーバの基本はディスクI/O処理ですので、基本的にgp2のディスクサイズは大きく取る事をお勧めします。 日次処理等で一時的な使用しかしない場合はディスクサイズを最小限にしてコストを抑える事が出来るかもしてません。しかし、I/O クレジットが枯渇した場合の対応を検討する事が必要ですので、余裕を持ったサイズを設定しましょう。