Mats Lofkvist wrote:
> > Actually, no, we are only O_SYNC'ing the WAL writes and sometimes that
> > is faster because you are not writing then fsyncing, you are just
> > writing. The fdatasync only is better than O_SYNC when you are doing
> > multiple WAL writes before an fdatasync and we normally don't do that.
> >
>
> I may be wrong on this, but my understanding is that the difference
> between fsync() and O_SYNC on the one hand and fdatasync() and O_DSYNC
> on the other hand is that the latter don't have to sync metadata
> (e.g. file access times) which saves a write to the inode that is
> more or less guarantied to require an extra seek.
>
> Iff this is true you never want to use fsync() or O_SYNC when
> fdatasync() and O_DSYNC is available (unless you really need the
> metadata to be synced too).
Yes, I didn't mention O_DSYNC. It is in the cards. If you are
interested, look at the code and how the defaults are chosen.
postgresql.conf say:
#wal_sync_method = fsync # the default varies across platforms:
# # fsync, fdatasync, open_sync, or open_datasync
Which means exactly that, varies based on the platform.
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073