Re: Spurious "apparent wraparound" via SimpleLruTruncate() rounding

Noah Misch <noah@leadboat.com>

From: Noah Misch <noah@leadboat.com>
To: Andrey Borodin <x4mmm@yandex-team.ru>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Tomas Vondra <tomas.vondra@2ndquadrant.com>, pgsql-hackers@postgresql.org
Date: 2021-01-09T22:15:39Z
Lists: pgsql-hackers
On Sat, Jan 09, 2021 at 08:25:39PM +0500, Andrey Borodin wrote:
> > 9 янв. 2021 г., в 15:17, Noah Misch <noah@leadboat.com> написал(а):

> >> I'm a little bit afraid that this kind of patch can hide bugs (while potentially saving some users data). Besides this patch seems like a useful precaution. Maybe we could emit scary warnings if SLRU segments do not stack into continuous range?
> > 
> > Scary warnings are good for an observation that implies a bug, but the
> > slru-truncate-t-insurance patch causes such an outcome in non-bug cases where
> > it doesn't happen today.  In other words, discontinuous ranges of SLRU
> > segments would be even more common after that patch.  For example, it would
> > happen anytime oldestXID advances by more than ~1B at a time.
> 
> Uhm, I thought that if there is going to be more than ~1B xids - we are going to keep all segements forever and range still will be continuous. Or am I missing something?

No; it deletes the most recent ~1B and leaves the older segments.  An
exception is multixact, as described in the commit message and the patch's
change to a comment in TruncateMultiXact().



Commits

  1. Prevent excess SimpleLruTruncate() deletion.

  2. Fix unlinking of SLRU segments.

  3. Defer flushing of SLRU files.

  4. Change XID and mxact limits to warn at 40M and stop at 3M.