こちらは MySQL Advent Calendar 2022 21 日目の記事です。
昨日は ryuichi1208 さんでした。
AWS の re:Invent の前後に、今年もいろいろな新サービスや改良などが発表されていますが、RDS for MySQL 関連では、
がありました。
このうち、前者(Read 高速化)は検証が難しそうなので、後者(Write 高速化)を少しだけ試してみました。
RDS Optimized Writes とは?
通常、MySQL ではストレージへの書き込み時に(障害対策のため)Double Write Buffer を使って二重に書き込みを行うのですが、これをクラウド基盤側(Nitro System)にオフロードして 1 回の書き込みで済ませてしまおう、という機能のようです。
「クラウド基盤側にオフロードする」といっても基盤側で二重書き込みするわけではなく、二重書き込みの代わりに「データページ単位でアトミックな書き込みができるようにする」という意味です。
現時点(2022/12/20)では
- RDS for MySQL 8.0.30 以降
で、
- db.r6i
- db.r5b
のインスタンスのみ対応、とのことです(東京で使えるのは後者だけ)。
今回は db.r5b インスタンスを使って試してみました。
試した内容
- db.r5b.large(2vCPU Mem:16GiB)Single-AZ に対して
mysqlslap
で負荷を掛ける -
mysqlslap
ではmixed
タイプ(読み書き両方)の負荷を 150・300・450 スレッドで- 追加で
write
(書き込みのみ)タイプの負荷も 450 スレッドで
- 追加で
- パラメーター
rds.optimized_writes
をAUTO
(デフォルト)・OFF
の状態で比較- 前者が Optimized Writes 有効(基盤へオフロード)、後者が無効(従来どおり DB 本体で二重書き込み)
マネジメントコンソールでの設定(画面の一部)
RDS の MySQL インスタンスを作る際のマネジメントコンソールに、Optimized Writes に関する項目が見えていますね。
2022/11 からストレージとして gp3 が使えるようになっています。
EC2 コンピューティングリソースへの接続は、2022/8 に追加された機能(設定を楽にする項目)のようです。
結果
3 回実行したうちの平均を取りました。
※数値は所要時間(秒)です。
- mixed(読み書き両方)
mysqlslap --auto-generate-sql --auto-generate-sql-guid-primary --engine=innodb --number-int-cols=20 --number-char-cols=20 --concurrency=【スレッド数】 --auto-generate-sql-write-number=2000 --auto-generate-sql-execute-number=2000 --auto-generate-sql-load-type=mixed -u admin -h 【エンドポイント】 -p
rds.optimized_writes | 150 スレッド | 300 スレッド | 450 スレッド |
---|---|---|---|
a. AUTO | 59.069 | 127.198 | 213.588 |
b. OFF | 60.430 | 131.648 | 218.756 |
(b / a) | 1.02 | 1.03 | 1.02 |
かなり微妙な結果ですね。
- write(書き込みのみ)
mysqlslap --auto-generate-sql --auto-generate-sql-guid-primary --engine=innodb --number-int-cols=20 --number-char-cols=20 --concurrency=【スレッド数】 --auto-generate-sql-write-number=2000 --auto-generate-sql-execute-number=2000 --auto-generate-sql-load-type=write -u admin -h 【エンドポイント】 -p
rds.optimized_writes | 450 スレッド |
---|---|
a. AUTO | 262.810 |
b. OFF | 270.420 |
(b / a) | 1.03 |
やはり微妙でした。
もう少し大きめのインスタンスを使って高い書き込み負荷を掛けないと実力が発揮できないのかもしれません。
明日は knktknk さんです。