]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Clamp result of MultiXactMemberFreezeThreshold
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Thu, 13 Jun 2024 16:01:30 +0000 (19:01 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Thu, 13 Jun 2024 16:02:49 +0000 (19:02 +0300)
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

src/backend/access/transam/multixact.c

index abb022e0670fa71cb7e9528c79c78a37b5c9eea0..3a2d7055c42d433a1f9a978eb74ff46c5ff7da01 100644 (file)
@@ -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