> Actually, this is already implemented.
> Further, in MariaDB 10.0, there is no fsync() needed in step 3. This is
> because in case of a crash, XA crash recovery can repeat the step 3 using the
> information saved in step 1 and 2. So in 10.0, we only need one shared fsync
> in step 1 plus one shared fsync in step 2.
> If you look in the innodb/xtradb code, you can see this. The prepare step
> calls trx_prepare_for_mysql() in trx/trx0trx.cc. This calls trx_prepare()
> which goes to trx_flush_log_if_needed_low() and calls log_write_up_to() in
> log/log0log.cc. And in log_write_up_to(), you will see the group commit
> logic. The transaction will wait for any previous fsync to complete; then if
> it still needs the fsync(), it will fsync not just itself, but also any other
> transactions that are waiting for fsync.
> There is some description of the removal of fsync() in step 3 here:
> http://kristiannielsen.livejournal.com/16382.html
> However, the group commit in step 1 has been in the InnoDB code for many
> years, as far as I know.
yeah, I got it. InnoDB/xtradb group commit indeed reduce fsync() called times
in prepare step,
but it could do more than one fsync() for a group of transactions in binlog
group commit to
be durable in prepare step.
what I think is it only to make sure that a group of transactions writing to
binlog has been flushed
to innodb/xtradb redolog. so how about don't flush redolog in prepare(),
insteadly let leader thread
to flush innodb/xtradb redolog to latest lsn just before it begin to write
follower transactions and itself
to binlog. that only need one fsync() for a group of transactions completed
prepare step to flush to redolog.
Thanks
_______________________________________________
Mailing list: https://launchpad.net/~maria-developers
Post to : [email protected]
Unsubscribe : https://launchpad.net/~maria-developers
More help : https://help.launchpad.net/ListHelp