Howard Chu writes:
In the default mode (fully synchronous) you can only lose the
in-progress
transaction.
Oh duh, I forgot the sync filehandle.
With dbnosync you can lose whatever hasn't been checkpointed yet.
I thought dbnosync could cause database corruption: Data and metadata
writes can get flushed out of order to the disk, leaving the meta page
temporarily pointing at garbage - at which time an OS crash or hardware
failure can make the inconsistency permanent. Frequent checkpoints
merely reduce the chance such a crash has of catching the DB in an
inconsistent state. (OTOH a mere slapd crash is no problem.)
There is another mode (recently added, not yet exposed in back-mdb)
that only
flushes the data, not the metadata. With that mode, you might lose the
in-progress transaction and the immediately preceding commit. This mode is
slightly faster than fully-synchronous, and slightly slower than fully asynch.
That's like if we compiled with -DMDB_DSYNC=0?
--
Hallvard