v4-0001-Doc-fix-of-aggressive-vacuum-threshold-for-multix.patch
text/plain
Filename: v4-0001-Doc-fix-of-aggressive-vacuum-threshold-for-multix.patch
Type: text/plain
Part: 0
Patch
Format: format-patch
Series: patch v4-0001
Subject: Doc fix of aggressive vacuum threshold for multixact members storage.
| File | + | − |
|---|---|---|
| doc/src/sgml/maintenance.sgml | 3 | 2 |
| src/backend/access/transam/multixact.c | 5 | 2 |
From 0965413dbb0b85e4dd78f87a6ca3847dccdc78c7 Mon Sep 17 00:00:00 2001
From: Alex Friedman <alexf01@gmail.com>
Date: Thu, 30 Jan 2025 17:19:07 +0200
Subject: [PATCH v4] Doc fix of aggressive vacuum threshold for multixact
members storage.
---
doc/src/sgml/maintenance.sgml | 5 +++--
src/backend/access/transam/multixact.c | 7 +++++--
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/doc/src/sgml/maintenance.sgml b/doc/src/sgml/maintenance.sgml
index 0be90bdc7ef..89040942be2 100644
--- a/doc/src/sgml/maintenance.sgml
+++ b/doc/src/sgml/maintenance.sgml
@@ -793,10 +793,11 @@ HINT: Execute a database-wide VACUUM in that database.
As a safety device, an aggressive vacuum scan will
occur for any table whose multixact-age is greater than <xref
linkend="guc-autovacuum-multixact-freeze-max-age"/>. Also, if the
- storage occupied by multixacts members exceeds 2GB, aggressive vacuum
+ storage occupied by multixacts members exceeds about 10GB, aggressive vacuum
scans will occur more often for all tables, starting with those that
have the oldest multixact-age. Both of these kinds of aggressive
- scans will occur even if autovacuum is nominally disabled.
+ scans will occur even if autovacuum is nominally disabled. The members storage
+ area can grow up to about 20GB before reaching wraparound.
</para>
<para>
diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c
index 27ccdf9500f..66adb9995d0 100644
--- a/src/backend/access/transam/multixact.c
+++ b/src/backend/access/transam/multixact.c
@@ -134,7 +134,8 @@ MultiXactIdToOffsetSegment(MultiXactId multi)
* corresponding 4 Xids. Each such 5-word (20-byte) set we call a "group", and
* are stored as a whole in pages. Thus, with 8kB BLCKSZ, we keep 409 groups
* per page. This wastes 12 bytes per page, but that's OK -- simplicity (and
- * performance) trumps space efficiency here.
+ * performance) trumps space efficiency here. If this computation changes, make
+ * sure to update the documentation.
*
* Note that the "offset" macros work with byte offset, not array indexes, so
* arithmetic must be done using "char *" pointers.
@@ -212,7 +213,9 @@ MXOffsetToMemberOffset(MultiXactOffset offset)
member_in_group * sizeof(TransactionId);
}
-/* Multixact members wraparound thresholds. */
+/* Multixact members wraparound thresholds.
+ * When changing the thresholds, make sure to update the documentation.
+ */
#define MULTIXACT_MEMBER_SAFE_THRESHOLD (MaxMultiXactOffset / 2)
#define MULTIXACT_MEMBER_DANGER_THRESHOLD \
(MaxMultiXactOffset - MaxMultiXactOffset / 4)
--
2.41.0