読者です 読者をやめる 読者になる 読者になる

ゆううきメモ

とにかく雑

MySQLの同期レプリケーションで複数の更新クエリを1トランザクション内で発行すると速くなるケース

っていう話をいちりんちゃんこと id:ichirin2501 に聞いた。

MySQLで準同期レプリケーションまたは同期レプリケーションを使って、マスター・スレーブ構成で運用している場合、マスターはコミット後、スレーブが更新イベントを受け取ってログに書き込むまで待つようになる。

ところが、例えばRDSでMulti AZ配置するケースのように、マスター・スレーブ間のネットワーク遅延が大きい場合、スレーブがイベントを受け取るまでのレイテンシが大きくなるので、準同期レプリケーションで性能が落ちることがある。

このとき、AUTOCOMMITを有効にして更新クエリごとにコミットしているケースと比較して、明示的に複数の更新クエリを1つのトランザクション内で発行させると、性能が向上するケースがある。なぜなら、スレーブが更新イベントをまとめて受け取るようになり、1リクエスト内の一連のクエリ実行に要するマスター・スレーブ間のイベント往復回数が減るためだ。

write I/Oをバッファして、まとめてフラッシュすると性能が向上するという話と似ている。

【追記】

Multi-AZ 配置 - Amazon RDS | AWS に、RDSのMulti AZ配置では同期物理レプリケーションを使用しているとある。これはDRBDみたいなものなのだろうか。