Re: ERROR: multixact X from before cutoff Y found to be still running - Mailing list pgsql-bugs

From Bossart, Nathan
Subject Re: ERROR: multixact X from before cutoff Y found to be still running
Date
Msg-id A38A1714-CC19-4EF6-BBE3-B716B4B16607@amazon.com
Whole thread Raw
In response to Re: ERROR: multixact X from before cutoff Y found to be still running  (Jeremy Schneider <schnjere@amazon.com>)
Responses Re: ERROR: multixact X from before cutoff Y found to be still running
Re: ERROR: multixact X from before cutoff Y found to be still running
List pgsql-bugs
On 9/4/19, 9:03 PM, "Thomas Munro" <thomas.munro@gmail.com> wrote:
> Both patches prevent mxactLimit from being newer than the oldest
> running multixact.  The v1 patch uses the most aggressive setting
> possible: the oldest running multi; the v2 uses the least aggressive
> of the 'safe' and oldest running multi.  At first glance it seems like
> the second one is better: it only does something different if we're in
> the dangerous scenario you identified, but otherwise it sticks to the
> safe limit, which generates less IO.

Thanks for taking a look!

Right, the v2 patch will effectively ramp-down the freezemin as your
freeze_max_age gets smaller, while the v1 patch will set the effective
freezemin to zero as soon as your multixact age passes the threshold.
I think what is unclear to me is whether this ramp-down behavior is
the intended functionality or we should be doing something similar to
what we do for regular transaction IDs (i.e. force freezemin to zero
right after it hits the "oldest xmin is far in the past" threshold).
The comment above MultiXactMemberFreezeThreshold() explains things
pretty well, but AFAICT it is more geared towards influencing
autovacuum scheduling.  I agree that v2 is safer from the standpoint
that it changes as little as possible, though.

Nathan


pgsql-bugs by date:

Previous
From: Andres Freund
Date:
Subject: Re: PostgreSQL12 crash bug report
Next
From: Thomas Munro
Date:
Subject: Re: ERROR: multixact X from before cutoff Y found to be still running