Thread: checkpoint reliability
I was wondering, when we start to reuse a WAL file, do we know that all dirty buffers modified in that WAL file have been flushed to disk? Do we fsync() dirty buffers at time of checkpoint, and do we also make sure that buffers we wrote to disk and later reused before the checkpoint also made it to disk? My point is that writing it to the kernel doesn't guarantee it made it to disk. I see the WAL records being fsync'ed in xlog.c but I don't see the buffer pages being fsynced. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026
Bruce Momjian <pgman@candle.pha.pa.us> writes: > I was wondering, when we start to reuse a WAL file, do we know that all > dirty buffers modified in that WAL file have been flushed to disk? Yes. At least two checkpoints ago, in fact. regards, tom lane
> Bruce Momjian <pgman@candle.pha.pa.us> writes: > > I was wondering, when we start to reuse a WAL file, do we know that all > > dirty buffers modified in that WAL file have been flushed to disk? > > Yes. At least two checkpoints ago, in fact. So when we decide to reuse a shared memory buffer and write it to disk, do we fsync it, or do we run a file sync() to force all dirty buffers to disk? -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026
Tom Lane wrote: > > Bruce Momjian <pgman@candle.pha.pa.us> writes: > > I was wondering, when we start to reuse a WAL file, do we know that all > > dirty buffers modified in that WAL file have been flushed to disk? > > Yes. At least two checkpoints ago, in fact. Isn't the following what Bruce asked ? /** mdsync() -- Sync storage.**/ int mdsync() {sync();if (IsUnderPostmaster) sleep(2);sync();return SM_SUCCESS; } regards, Hiroshi Inoue
> Tom Lane wrote: > > > > Bruce Momjian <pgman@candle.pha.pa.us> writes: > > > I was wondering, when we start to reuse a WAL file, do we know that all > > > dirty buffers modified in that WAL file have been flushed to disk? > > > > Yes. At least two checkpoints ago, in fact. > > Isn't the following what Bruce asked ? > > /* > * mdsync() -- Sync storage. > * > */ > int > mdsync() > { > sync(); > if (IsUnderPostmaster) > sleep(2); > sync(); > return SM_SUCCESS; > } Oh, yes. That is it. I couldn't find out how we were sure our pages that we had written to the kernel were actually on disk before we started reusing the WAL files. Thanks. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026