26.02.2020 18:00, Paul Reeves wrote:
It seems to contain two contradictory statements. On the one hand it says:
The journal file I/O is always synchronous and cannot be altered
Synchronous from the filesystem POV. Like with FW=ON for Firebird, but
applies only to journal files.
and in an earlier section on the same page we can read about the PAGE CACHE
setting:
Determines the number of journal pages that are cached to memory. This
number must be large enough to provide buffers for worker threads to write
to when the cache writer is writing other buffers.
Page cache is always in game, regardless of sync/async writes.
My reading of that is that there is only one cache writer, and journal writes
are queued in the memory cache until they are finally written out to disc.
The only different to Firebird's asynchronous writes that I can see is that
journalling uses its own cache instead of the filesystem cache.
AFAIU, journalling uses a dedicated part of the page cache which is
flushed either at commit or asynchronously by the cache writer thread.
Same as in Firebird, but we do that for all modified pages. InterBase
delays other (non journal i.e. data/index/blob) page flushes until the
next checkpoint. This is the common approach for all WAL implementations
I'm aware of.
Dmitry
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel