On 20/08/2018 15:10, Reinis Rozitis wrote:
Hi all,
anyone with some suggestion/insight on the matter?

While I can't comment on the intricacies or internals of MySQL being (un)able 
to recover after a crash without the doublewrite buffer, if you skim through 
the changelog between versions (be that upstream Oracle or downstream in 
Maria/Percona), nearly every second (even minor) version has some sort of 
dataloss/corruption/segfault type of bug. Just for example a recent comes into 
mind https://jira.mariadb.org/browse/MDEV-15764

D'oh! [1]

 From my experience I've been switching off doublewrite on MySQL (even on XFS 
and now on ZFS (because of compression)) for years and even in the few 
accidental powerloss/total crash cases I haven't seen a corruption caused by an 
unexpected reboot (possible write lost midflight). Most times mysql hasn't been 
unable to start just because of internal issues (which you solve by having 
slaves and backups).

Uhm, powerloss and segfault/segkill (ie: process crash) are quite different. The first means *any* activity is stopped (ie: filesystem has no means to write anything), while the latter means *mysqld* stops writing but the filesystem can write the partial data received.

My point being - zfs in principle is the same as the "atomic write hardware" (eg either the block writes succeed fully or not at all) so if you turn off doublewrite on those fancy Fusionio cards, I don't see a reason why you can't do the same on zfs.

What I means is that while a ZFS write is an all-or-nothing affair, it can write partial data from the application (mysqld) point of view. What it needs is a partial data from the application itself (ie: a crashing mysqld) - garbage in, garbage out. Doublewrite *shoult* catch that (ie: at restarting, mysqld would read the double buffer, detect it as corrupt and discard it while not touching at all any previous data on main database files).

My understanding (which *can* be wrong) is that MariaDB "atomic write support" is a mean to inform the underlying device of the entire write process and to keep new data on "spare" location until the application itself (mysqld) commits the *entire*, verified write, enabling the hardware device to atomically swap/remap the affected data locations. In this case, a failed mysqld process will never reach the "commit phase", leaving the old data untouched.

Even if there are some edge cases where it could become "unsafe" most of the 
time you still run with better performance and considering the SSD wear level the 
hardware could fail (reach end of life) ~two times sooner ;)

Good point, this surely is a factor to evaluate.


p.s. sorry for the mail not being about the particular technical aspects rather 
than general thoughts


They are greatly appreciated!
Thanks.


[1] https://en.wikipedia.org/wiki/D%27oh!

--
Danti Gionatan
Supporto Tecnico
Assyoma S.r.l. - www.assyoma.it
email: [email protected] - [email protected]
GPG public key ID: FF5F32A8

_______________________________________________
Mailing list: https://launchpad.net/~maria-discuss
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~maria-discuss
More help   : https://help.launchpad.net/ListHelp

Reply via email to