トランザクションコミットの前に、すべてのdml操作はinnodbページを変更し、ディスクにフラッシュして元に戻すログを生成するため、元に戻すログがディスクに書き込まれ、fsyncが行われると、確実にロールバックされます。
INSERT
など)を変更バッファーに入れて、後で処理できるようにします。繰り返しますが、ディスクへの書き込みはまだ行われていません。innodb_flush_log_at_trx_commit = 1
(それ以外の場合、この書き込み/ fsyncは遅延します)。COMMIT
が終了したことをクライアントに伝えます。アイデアは、COMMIT
ごとにfsyncを1つだけにすることです。そうでなければ、パフォーマンスは本当に悪いでしょう。
レプリケーションを使用している場合、binlogは書き込まれ(log_bin
を参照)、場合によってはfsyncされます(sync_binlog
を参照)。そして、データは各スレーブに送られます。これらがシーケンスのどこで発生するか正確にはわかりません。
Galera/FXC/Group Replicationを使用している場合、他のノードとの同期により、質問に別の側面が追加されます。 (私はあなたがこれらの詳細を必要としないと仮定します。)
それはシステム構成次第です。例を見てください: