At Thu, 19 Jan 2017 18:37:31 +0900 (Tokyo Standard Time), Kyotaro HORIGUCHI <horiguchi(dot)kyotaro(at)lab(dot)ntt(dot)co(dot)jp> wrote in <20170119(dot)183731(dot)223893446(dot)horiguchi(dot)kyotaro(at)lab(dot)ntt(dot)co(dot)jp>> > > - Delaying recycling a segment until the last partial record on it> > > completes. This seems doable in page-wise (coarse resolution)> > > but would cost additional reading of past xlog files (page> > > header of past pages is required).> > > > Hm, yes. That looks like the least invasive way to go. At least that> > looks more correct than the others.> > The attached patch does that. Usually it reads page headers only> on segment boundaries, but once continuation record found (or> failed to read the next page header, that is, the first record on> the first page in the next segment has not been replicated), it> becomes to happen on every page boundary until non-continuation> page comes.> > I leave a debug info (at LOG level) in the attached file shown on> every state change of keep pointer. At least for pgbench, the> cost seems ignorable.

I revised it. It became neater and less invasive.

- Removed added keep from struct WalSnd. It is never referrenced from other processes. It is static variable now.