AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

おじいさんに選ばれたのは大きなトランザクションでした

RDS で LOAD DATA LOCAL INFILE って素直に使えるんだっけ? と思って調べていたら以下のような記述を見つけてしまった。

バイナリログ作成を有効にすると、トランザクションが大きい場合、IOPS とディスク消費量が 3 倍になります。これは、ディスクに書き込まれるバイナリログキャッシュ、ディスク容量の消費、書き込みごとに増える IO が原因です。

ゲーッ!

いままで MySQL は最大でも 2 倍 (変更対象のデータベースやテーブルを取得してメモリに乗せる -> 流れてきた変更をメモリ上で実行する -> 実データ領域に新しくフラッシュ -> 既存のデータを削除してまるごと入れ替え) みたいな認識だったので、「あーなるほど binlog……」という感じだった、

と思ったら、以下のように書いてあり。

トランザクションが小さい場合、バイナリログ作成により、データのロードに必要なディスク書き込み数が 2 倍になります。

大きい・小さい、という粒度がサッパリわからんので恐ろしい……。 基本のラインとして、ディスク容量は 3 倍・メモリ容量は 2 倍、とおぼえておくと良いのかもしれない、というお話でした。はー RDB にまつわるシステム難しい。

docs.aws.amazon.com