見せてもらおうか、インスタンスストアの実力とやらを...
SQLServerのテストに行く前に、ベンチしてみます。
ディスクのベンチマークについては、AWS公式のこちらにガイドがあります。
今回はDiskSpdを使います。久しぶりにダウンロードしてみたら、バージョンアップしていました。
パラメータ指定など使い方についてはMicrosoft公式のこちらと、こちらも参考にしました。
今回は日中OLTPに加えて夜間バッチでの連続負荷も想定し、読み書き比率は50%でテストしました。
※パラメータが適切でないかもしれません。突っ込み大歓迎です。むしろぜひお願いします...
diskspd.exe -b4K -d30 -o2 -t1 -Sh -r -w50 -L -Z1G -c20G E:\dummy.dat >results_ra1.txt
diskspd.exe -b8K -d30 -o2 -t1 -Sh -r -w50 -L -Z1G -c20G E:\dummy.dat >results_ra2.txt
diskspd.exe -b16K -d30 -o2 -t1 -Sh -r -w50 -L -Z1G -c20G E:\dummy.dat >results_ra3.txt
diskspd.exe -b64K -d30 -o2 -t1 -Sh -r -w50 -L -Z1G -c20G E:\dummy.dat >results_ra4.txt
diskspd.exe -b128K -d30 -o2 -t1 -Sh -r -w50 -L -Z1G -c20G E:\dummy.dat >results_ra5.txt
diskspd.exe -b4K -d30 -o4 -t4 -Sh -r -w50 -L -Z1G -c20G E:\dummy.dat >results_rb1.txt
diskspd.exe -b8K -d30 -o4 -t4 -Sh -r -w50 -L -Z1G -c20G E:\dummy.dat >results_rb2.txt
diskspd.exe -b16K -d30 -o4 -t4 -Sh -r -w50 -L -Z1G -c20G E:\dummy.dat >results_rb3.txt
diskspd.exe -b64K -d30 -o4 -t4 -Sh -r -w50 -L -Z1G -c20G E:\dummy.dat >results_rb4.txt
diskspd.exe -b128K -d30 -o4 -t4 -Sh -r -w50 -L -Z1G -c20G E:\dummy.dat >results_rb5.txt
diskspd.exe -b4K -d30 -o2 -t1 -Sh -w50 -L -Z1G -c20G E:\dummy.dat >results_sa1.txt
diskspd.exe -b8K -d30 -o2 -t1 -Sh -w50 -L -Z1G -c20G E:\dummy.dat >results_sa2.txt
diskspd.exe -b16K -d30 -o2 -t1 -Sh -w50 -L -Z1G -c20G E:\dummy.dat >results_sa3.txt
diskspd.exe -b64K -d30 -o2 -t1 -Sh -w50 -L -Z1G -c20G E:\dummy.dat >results_sa4.txt
diskspd.exe -b128K -d30 -o2 -t1 -Sh -w50 -L -Z1G -c20G E:\dummy.dat >results_sa5.txt
テストは次の3種類のディスクを対象に実施しました。
1.インスタンスストア
2.EBS gp3 6000/125(同コストのEBS)
3.EBS gp3 16000/1000(参考としてgp3max性能でどうなるか)
インスタンスストア
テスト内容(上から順番) | MiB/sec | IOPS |
---|---|---|
1 ランダム4K 1スレッド | 147.49 | 37757.47 |
2 ランダム8K 1スレッド | 249.23 | 31901.53 |
3 ランダム16K 1スレッド | 254.66 | 16297.93 |
4 ランダム64K 1スレッド | 255.50 | 4088.04 |
5 ランダム128K 1スレッド | 256.37 | 2050.92 |
6 ランダム4K 4スレッド | 226.63 | 58016.45 |
7 ランダム8K 4スレッド | 255.27 | 32675.14 |
8 ランダム16K 4スレッド | 255.55 | 16355.50 |
9 ランダム64K 4スレッド | 255.51 | 4088.09 |
10 ランダム128K 4スレッド | 255.15 | 2041.20 |
11 シーケンシャル4K 1スレッド | 99.20 | 25395.64 |
12 シーケンシャル8K 1スレッド | 173.54 | 22213.38 |
13 シーケンシャル16K 1スレッド | 260.24 | 16655.15 |
14 シーケンシャル64K 1スレッド | 254.92 | 4078.68 |
15 シーケンシャル128K 1スレッド | 256.02 | 2048.15 |
EBS gp3 6000/125
テスト内容(上から順番) | MiB/sec | IOPS |
---|---|---|
1 ランダム4K 1スレッド | 11.95 | 3059.37 |
2 ランダム8K 1スレッド | 23.46 | 3002.42 |
3 ランダム16K 1スレッド | 46.95 | 3004.90 |
4 ランダム64K 1スレッド | 125.20 | 2003.22 |
5 ランダム128K 1スレッド | 125.20 | 1001.61 |
6 ランダム4K 4スレッド | 11.72 | 2999.81 |
7 ランダム8K 4スレッド | 23.44 | 2999.79 |
8 ランダム16K 4スレッド | 46.87 | 2999.81 |
9 ランダム64K 4スレッド | 125.20 | 2003.22 |
10 ランダム128K 4スレッド | 125.20 | 1001.58 |
11 シーケンシャル4K 1スレッド | 11.72 | 3000.07 |
12 シーケンシャル8K 1スレッド | 23.57 | 3016.38 |
13 シーケンシャル16K 1スレッド | 47.19 | 3019.92 |
14 シーケンシャル64K 1スレッド | 125.20 | 2003.25 |
15 シーケンシャル128K 1スレッド | 125.20 | 1001.61 |
EBS gp3 16000/1000
テスト内容(上から順番) | MiB/sec | IOPS |
---|---|---|
1 ランダム4K 1スレッド | 12.84 | 3286.25 |
2 ランダム8K 1スレッド | 25.02 | 3202.38 |
3 ランダム16K 1スレッド | 51.38 | 3288.39 |
4 ランダム64K 1スレッド | 167.33 | 2677.25 |
5 ランダム128K 1スレッド | 282.17 | 2257.34 |
6 ランダム4K 4スレッド | 62.51 | 16002.61 |
7 ランダム8K 4スレッド | 125.02 | 16002.78 |
8 ランダム16K 4スレッド | 250.04 | 16002.68 |
9 ランダム64K 4スレッド | 571.06 | 9137.01 |
10 ランダム128K 4スレッド | 571.08 | 4568.66 |
11 シーケンシャル4K 1スレッド | 13.25 | 3391.92 |
12 シーケンシャル8K 1スレッド | 25.79 | 3301.65 |
13 シーケンシャル16K 1スレッド | 48.29 | 3090.63 |
14 シーケンシャル64K 1スレッド | 137.34 | 2197.46 |
15 シーケンシャル128K 1スレッド | 236.66 | 1893.26 |
考察
※diskspdのテスト条件を変えるとまた違う結果が出るとは思います。
総括としてはSQLServerでの利用を前提とすると64KのランダムI/Oが最重要と考えますので、インスタンスストアを積極利用すべきと思いました。
インスタンスストアの場合
スループットはブロックサイズ4K, 8Kの場合はI/Oをまとめる影響なのか、バースト性能以上の値が出ました。
一方、スループットに関してはブロックサイズ4K以外は、どの条件でも250MiB/sec近辺の値となりましたので、このあたりが上限のようです。
今回テストした条件においては、gp3に比べて安定した値が出ました。
gp3 6000/125 の場合
IOPSは約3000で頭打ちとなりました。ランダムI/Oはスレッド数1でも4でも、ほぼ変わらない結果となりました。
gp3 16000/1000の場合
スループットはr5d.xlargeのバースト性能に近い値が出ていて、IOPSに関してはディスク自体の上限値が出ています。
スループット、IOPSとも、条件によって値のバラつきはあります。
ランダムI/Oはスレッド数1と4ではかなり違う値となりました。