diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2024-06-13 19:01:30 +0300 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2024-06-13 19:02:49 +0300 |
commit | 566a7d9182de9c06b786a747dfd3d42a938299c7 (patch) | |
tree | bdb66e242a306b5a6a56dacff91e568a7ff95173 | |
parent | 32c5dc0ebe83e927c953c42ad79148a03933c6ba (diff) | |
download | postgresql-566a7d9182de9c06b786a747dfd3d42a938299c7.tar.gz postgresql-566a7d9182de9c06b786a747dfd3d42a938299c7.zip |
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
-rw-r--r-- | src/backend/access/transam/multixact.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c index abb022e0670..3a2d7055c42 100644 --- a/src/backend/access/transam/multixact.c +++ b/src/backend/access/transam/multixact.c @@ -2828,6 +2828,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)) @@ -2849,7 +2850,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 |