On Thu, Apr 17, 2014 at 08:54:25PM -0700, David G Johnston wrote:
> > And i understood the difference between, for example, fsync and fdatasync,
> > and between open_datasync and open_sync, but i cannot understand the
> > difference between open_sync and fsync or between open_datasync and
> > fdatasync , As far as i could understand, the open_* methods call the
> > open() method of linux, and f*sync methods calls the fsync() method of
> > linux?
> >
> > My doubt is about what's the difference between them, or a link where this
> > is explained. In the previous link it talks about the 4 methods but i
> > cannot distinguish the difference between them.
>
> fsync and open are both system functions for which documentation exists on
> the Internet.
>
> Short answer seems to be that the physical write is guaranteed: open =
> immediately; fsync = at commit
>
> As long as "fsync mode" is on after a commit command returns the WAL is
> promised to be physically written to disk; the means and speed of doing so
> vary according to the method chosen (limited by platform), the workload, the
> hardware, and the OS.
>
> Others will correct any misunderstandings I may have acquired in my quick
> reading and reasoning.
The open* sync methods use a flag when the file is open that cause
_every_ write to be flushed to disk automatically. The non-open* types
allow multiple writes and require a specific sync* command to be issued
when needed.
--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com
+ Everyone has their own god. +