地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【RDS】IOPSとスループットが思ってたのと違った数値が出たので調べた

RDSのiopsが1,000となっていればinnodb_page_sizeの数値をかけ合わせた数値がスループットになると思っていた。この例で言えば1,000[iops] * 16,384[byte] ≒ 16[MB]あたり。だがメトリクスを見るとwriteが多い時間帯はこのような計算式当てはめることが出来なかった。

innodb_page_sizeとは

innodbが管理するページのサイズ。このページにはレコードが入っていてinnodbはこの単位でしかIOを発行できない。1レコード読む際も必ずこのサイズのデータのやり取りが発生する

speakerdeck.com

EBSのブロックサイズ

EBSはローカルディスクでは無いのでブロックサイズは意識しなくてよい?(ネットワークを介して通信をする。重要なのは帯域であってブロックサイズは重要性は低そう?)

blog.takuros.net

この辺は以下の回答コメントで割と腑に落ちた

stackoverflow.com

EBS性能測定とかも色々見たがブロックサイズを上げることで性能が上限まで線形にスケールしていそう

qiita.com

なんで合わないのかの推測

innodb_page_sizeはあくまでもテーブルスペースのデータのやり取りの話になるのでMySQLは他にも色々仕事をしてるのでそのへんが実はblock sizeが16Kibではないのではという予想。redo log bufferのflushやらpage cleanerとかバックグラウンドで動いてるスレッドは多々ありこの辺がblock size 1MBあたりででIOしてれば上記で上げた計算式からはずれそう。

あとはこんなオプションもあったりする。5.6からデフォルトでオンでダーティページのflushの際に近くのダーティページのflushを1IOで行うというオプション。16Kib * 隣接するページとなる。

dev.mysql.com

感想

ストレージの性能指標難しい