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
This commit is contained in:
Heikki Linnakangas 2024-06-13 19:01:30 +03:00
parent f83908798f
commit c425113eeb

View file

@ -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