RDS: Provisioned IOPS (PIOPS)の性能について覚書き
EBSでのProvisioned IOPS (以下 PIOPS) が出て、しばらくして RDSでも PIOPSに対応した。その後、RDSのIOPS上限が10,000から30,000に引き上げられた。
Amazon Web Services ブログ: 【AWS発表】Amazon RDS がスケールアップ! 3 TB、30,000 PIOPSまで拡張可能に
され、これでRDSでIOPS30,000の性能が出る!とおもいきや、落とし穴(注意書き)が。
Factors That Affect Realized IOPS Rates
実際に出るIOPSは、ページサイズとネットワーク帯域に依存する。ページサイズはDBエンジン毎にきまっている。IOPSはDBインスタンスサイズやDBの負荷パターンにも影響をウケる。
DB Engine | Page Size | Maximum IOPS Rate |
---|---|---|
MySQL | 16 KB | 12,500 |
Oracle | 8 KB | 25,000 |
SQL Server | 8 KB | 10,000 |
つまり、db.m2.4xlargeが、EBSとの帯域がfull duplex 1000Mbpsで、MySQLだと16KBのページサイズなので、各方向( read, write) の上限が6,250 IOPSになる。
1,000 Mbps / (16KB x 1.28) = 6,250 IOPS ※1.28の係数は over Etherの色んなオーバーヘッド?
よって、read, writeがそれぞれ上限値に達していれば、 12,500 IOPSになる、という理論値が導出される。
ただし、上記の条件以上にIOPSを設定した場合は無意味ではなく、write latency, read latencyは改善されていくので、絶対的なIOPSではなく、1回のクエリのパフォーマンスを向上させる目的では引き続き有効である、といえる。
(つまり、MySQL db.m2.4xlargeでベンチマークを実施すると、write/read IOPSは5,000〜6,000あたりでサチるが、write/read latencyはPIOPSに応じで改善されることになる)
EBSがネットワークストレージのため、ストレージ+ネットワークの両方を考えないと、理論値すら理解しづらい。
こちらも参考に
Cloud, Big Data and Mobile: Part 10: Performance Tuning Amazon Elastic Block Store - IO Block Size