TokuDB Read Free Replication : not implemented in MariaDB!
I) Why using TokuDB?I have been playing with TokuDB since 2013. Although it's a really good storage engine, it's sometimes full of surprises.
Initially I migrated one of my customer from InnoDB to TokuDB because it was solving all their issues : their DB has been growing to more then 1TB, and they were facing insert performances issues.
After the migration, there DB size dropped to 100GB which was really amazing, without loss in performances compared to InnoDB, and way better insert performances.
II) Read Free ReplicationAt this time I was using the TokuDB enterprise MariaDB 5.5.41 custom version, with Read Free Replication enabled on a slave. To enable it, you need to have row-based replication enabled on the master and to set the following variables on the slave :
tokudb_rpl_unique_checks=0 tokudb_rpl_lookup_rows=0 read-onlyAs a reminder, Read Free Replication allows better throughput, and reduces greatly slave lag by lowering the read IO operations. (for more informations, you can check this blog post).
In 2015, Percona acquired Tokutek, the company behind TokuDB and the TokuDB custom enterprise versions were dropped. With the recent improvement in the TokuDB engine, I decided a few weeks ago it was time to migrate the DB from TokuDB entreprise for MariaDB 5.5.41 to MariaDB 10.1.16.
The migration was really painful (this is another story), and I had a slave with data slightly different than on the master. So I was expecting a few glitch during the replication, but I wasn't expecting the replication to fail with Read Free Replication enabled.
After a few events replicated, I hit my first replication issue :
Could not execute Write_rows_v1 event on table sc_2.sc_If Read Free Replication is enabled, why do we have a duplicate entry reported ?
forum_user_ notification; Duplicate entry '67079-31379-7944' for key 'unq_user_ parent_ message_ forum_topic' , Error_code: 1062; handler error HA_ERR_ FOUND_DUPP_ KEY; the event's master log mysql-bin.008448, end_log_pos 55965980
After a feedback from Percona, I first thought it was an undocumented but expected behaviour. However, thanks to Tim Callaghan & Rich Prohaska comments, I discovered it was because MariaDB has never implemented (yet) the required hooks needed to have the Read Free Replication working. There's an open JIRA ticket with the needed patch to make it working properly.