From: Heikki Linnakangas Date: Thu, 13 Jun 2024 16:01:30 +0000 (+0300) Subject: Clamp result of MultiXactMemberFreezeThreshold X-Git-Tag: REL_17_BETA2~56 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=c425113eebb7dbc7f0031ed97b32f267a9cac75f;p=postgresql.git Clamp result of MultiXactMemberFreezeThreshold The purpose of the function is to reduce the effective autovacuum_multixact_freeze_max_age if the multixact members SLRU is approaching wraparound, to make multixid freezing more aggressive. The returned value should therefore never be greater than plain autovacuum_multixact_freeze_max_age. Reviewed-by: Robert Haas Discussion: https://www.postgresql.org/message-id/85fb354c-f89f-4d47-b3a2-3cbd461c90a3@iki.fi Backpatch-through: 12, all supported versions --- diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c index 54c916e0347..a4e732a3f54 100644 --- a/src/backend/access/transam/multixact.c +++ b/src/backend/access/transam/multixact.c @@ -2932,6 +2932,7 @@ MultiXactMemberFreezeThreshold(void) uint32 multixacts; uint32 victim_multixacts; double fraction; + int result; /* If we can't determine member space utilization, assume the worst. */ if (!ReadMultiXactCounts(&multixacts, &members)) @@ -2953,7 +2954,13 @@ MultiXactMemberFreezeThreshold(void) /* fraction could be > 1.0, but lowest possible freeze age is zero */ if (victim_multixacts > multixacts) return 0; - return multixacts - victim_multixacts; + result = multixacts - victim_multixacts; + + /* + * Clamp to autovacuum_multixact_freeze_max_age, so that we never make + * autovacuum less aggressive than it would otherwise be. + */ + return Min(result, autovacuum_multixact_freeze_max_age); } typedef struct mxtruncinfo