はじめに
EC2でSQLServerを使う開発案件のなかで、インスタンスストアを有効に使えるかどうか試してみました。
OSとDB
OS: WindowsServer2016
DB: SQLServer2019
比較の趣旨
下記2パターンを比較してみます。
・r5d.xlargeでインスタンスストアにTEMPDBを配置する構成
・r5.xlargeでEBSボリュームにTEMPDBを配置する構成
両社の比較で、インスタンスストア使ったほうが安くて速いよね、ってなるのが想定シナリオなんだけど、果たしてどうなることか...
コスト
まずEC2インスタンス費用から。
アジアパシフィック(東京)、オンデマンドで、月間使用率100%で計算。
r5d.xlarge 388.36 USD/month
r5.xlarge 356.24 USD/month
差額 32.12 USD/month
r5d.xlargeのインスタンスストア容量は150GiBです。
上記差額に近い、同容量のEBSと比較してみたいと思います。
→ gp3, 6000/125で、32.40 USD/month なので、これと比較することにしました。
テストマシンのディスク構成
Drive | Type | Size | IOPS | Throughput | 用途 |
---|---|---|---|---|---|
C: | EBS gp3 | 150GiB | 3000 | 125MB/sec | OS |
D: | EBS gp3 | 150GiB | 6000 | 125MB/sec | TEMPDB配置場所1 |
E: | インスタンスストア | 150GiB | - | - | TEMPDB配置場所2 |
F: | EBS gp3 | 200GiB | 3000 | 125MB/sec | DBファイル配置場所 |
※r5d.xlargeとr5.xlargeは基本性能が同じなので、r5d.xlargeにTEMPDB配置用のEBSを追加し、TEMPDBの場所を切り替えてテストとします。
インスタンスの性能上限
r5.xlarge/r5d.xlargeとも、インスタンスのI/Oにバーストがあります。
以下AWS公式サイトから抜粋した数値をもとに補足
I/Oサイズ | IOPS | Throughput | |
---|---|---|---|
バースト | 16KiB | 18,750 | 292.97 MB/sec |
バースト | 128KiB | 4,750 | 593.75 MB/sec |
ベースライン | 16KiB | 6,000 | 93.75 MB/sec |
ベースライン | 128KiB | 1,150 | 143.75 MB/sec |
TEMPDBにインスタンスストアを使うと、バースト性能が発揮できるはずです。
一方、TEMPDBにEBSを使った場合は、ディスク性能が足かせとなるためベースラインの範囲の性能までしか発揮できないはずです。(今回のテストではコスト固定でディスク性能を調整したので)