As I understand it, for transactional storage engines to be in sync
with the binary log after recovery, the storage engine must support
two phase commit (aka XA). In MySQL 5.5 and MariaDB 5.5, the engine
must fsync its log when a transaction prepares and when a transaction
commits. So, for each transaction, there are three fsyncs, one for
prepare, one for the binary log, and one for commit.
I also understand that this requirement has changed in MySQL 5.6 and
MariaDB 10.0. With those releases, there is a way for storage engines
to reduce their fsyncs. I also believe that MariaDB 5.5 still requires
all of these fsyncs.
My questions are:
- in MySQL 5.6 and MariaDB 10.0, what are the fsyncing requirements
for storage engines during prepare and commit?
- are there new APIs that the storage engine must comply with in
order to get these benefits?
- in MySQL 5.6, I see new handlerton methods commit_low and
prepare_low. What do these APIs do? What is their contract?