Amazon AuroraのIO関連で見るべき指標
- English Version is below
Amazon AuroraのIOPSについて
Amazon AuroraのRead/WriteIOPS
とVolumeRead/WriteIOPS
の存在意義の違いがわからなくなったのでAuroraのIOPS関連を調べてみました。
TL;DR
- コストに関連する指標がみたい:
VolumeReadIOPS/VolumeWriteIOPS
- Cacheを効率的に使えているかみたい:
BufferCacheHitRatio
- インスタンスごと/詳細IOPSがみたい:
ReadIOPS/WriteIOPS
- Byte単位でみたい:
ReadThroughput/WriteThroughput
IOPSとは
IOPSは、データベースがどれだけ活発にストレージとデータをやり取りしているかを示す尺度です。1データベースページの読み取りごとに1 IOPSがカウントされます。
AuroraではMySQLなら最大16KB、Postgresなら最大8KBが1データベースページとなります。
Aurora supports a 16 KB page size for Amazon Aurora MySQL and an 8 KB page size for Amazon Aurora PostgreSQL. The page size is the smallest I/O operation that the database engine performs.
コストに直結するVolumeRead/WriteIOPS
VolumeReadIOPS/VolumeWriteIOPS
はAuroraのI/Oにかかる費用と比例する指標です。
クラスター単位のみで、5分間隔が最小です。
([billed] VolumeRead/WriteIOPS
と記載される場合もあり)
データ量に対して読み書きが多いサービスではAuroraではI/Oにかかるコストがかなり多くの割合を占める場合があるので、突然のコスト上昇が発生していないか、アラームをつけて監視する価値があります。
ちなみに、MySQL AuroraのIOはTokyoリージョンだと執筆時点では以下のような価格設定になっています。
$0.24 per 1 million requests
I/Oが多い場合は2023年5月にアナウンスされたAurora I/O-Optimizedを利用することでコスト削減できそうです。
無駄なI/Oを測るBufferCacheHitRatio
BufferCacheHitRatio
はReadの際に各リクエストがDBインスタンスのRAMのキャッシュからデータを取得している割合を測る指標です。
この割合が低くなることはディスクI/O(厳密にはOutput)が増えることを意味するので、VolumeReadIOPS/ReadIOPSも上昇する可能性が高いです。この指標は非効率なI/Oを把握する上でとても有効です。
この指標が低い場合、RAMが不足して十分にデータがキャッシュできていない可能性があるので、インスタンスのスケールアップなどの検討が必要かもしれません。
インスタンス単位で見れるReadIOPS
ReadIOPS/WriteIOPS
では、インスタンス、クラスター、Role(Writer/Reader)などの様々な単位と、より細かい間隔(1分) でのIOPSを見れます。
Auroraは普通のRDSとは異なりI/Oに対してストレージが自動でスケールアップしていくので、IOPS単体の増加がパフォーマンスに影響することはないようです。
この指標が必要になる場面は、VolumeReadIOPS
等の上昇アラートを受け取った上で、インスタンスごとのI/Oの詳細を確認する際などが考えられます。
また、Byte単位でみたい場合はReadThroughput/WriteThroughput
を利用することができます。
さいごに
どの指標を見るべきかというのは指標ごとの詳しい理解が必要なので難しいと思います。
もし異なる意見があればぜひ教えてください!
Discussion