Skip to content

vacuum_multixact_freeze_min_age

vacuum_multixact_freeze_min_age — Minimum age at which VACUUM should freeze a MultiXactId in a table row. Observed in PG9.3–19 Beta 3; its last measured boot default is 5000000 in PG19 Beta 3, with user context. This is a beta-snapshot fact and can change before PostgreSQL 19 GA.
Note

Fact — official short description: “Minimum age at which VACUUM should freeze a MultiXactId in a table row.”

Identity

Type , Valueinteger
Upstream pg_settings type
Context , Valueuser
Settable by an ordinary user
Unit , Value
Raw unit
Range , Value01000000000
Raw limits in the last observed version
Enum values , Value
— for non-enum types
Category , ValueVacuuming / Freezing
Upstream classification
Latest boot value , Value5000000
5000000

Lifecycle

Fact Value
First observed PG9.3
Present in PG9.3–19 Beta 3
Removed in No
Introduction commit fb47de2be6e4 — Separate multixact freezing parameters from xid’s
Commit date 2014-02-13
Discussion

Default history

Measured PG9.0–19 Beta 3 boot defaults
Versions Raw boot_val Unit Human value
PG9.3–19 Beta 3 5000000 5000000

How it works

Sets the minimum MultiXact age at which VACUUM replaces old tuple xmax MultiXact IDs. It is a user-context setting and is distinct from the XID cutoff.

Lower values make VACUUM process MXIDs earlier; higher values defer that work. PostgreSQL may still remove MultiXacts proactively, and the effective cutoff is capped at half of autovacuum_multixact_freeze_max_age.

Track mxid_age(relminmxid), mxid_age(datminmxid), and pg_multixact member storage. Interpret it with vacuum_multixact_freeze_table_age, autovacuum_multixact_freeze_max_age, and vacuum_multixact_failsafe_age.

Tuning advice

Tip

Advice. These are workload-specific starting points and must be validated with measurements.

Workload Guidance
OLTP Tune from MXID consumption caused by row locks and multitransaction workloads. Preserve ample distance to autovacuum_multixact_freeze_max_age and monitor member storage as well as age.
OLAP Bulk reads alone rarely justify a change, but concurrent row-locking loaders can consume MXIDs quickly. Measure mxid_age and pg_multixact growth during the real load.
Small nodes Keep the default unless MXID evidence says otherwise. Low transaction volume does not protect a workload that creates many shared row locks.

Pigsty

Values use the fixed 8-vCPU, 32-GiB, 100-GiB SSD fixture and render the current Pigsty templates for PG19 Beta 3; this does not assert current Pigsty support for that historical or beta release.

Template Effective value Versus upstream boot Source expression
OLTP Unmodified
OLAP Unmodified
CRIT Unmodified
TINY Unmodified
Caution

Advice — pending human review. Fact from the current Pigsty template projection: OLTP: PG9.3–19 Beta 3 unmodified; OLAP: PG9.3–19 Beta 3 unmodified; CRIT: PG9.3–19 Beta 3 unmodified; TINY: PG9.3–19 Beta 3 unmodified. No Pigsty-specific rationale is inferred from an absent override.

Common pitfalls

  • Describing the cutoff as an XID control or monitoring only relfrozenxid.
  • Ignoring pg_multixact member-space pressure, which can force aggressive work before the configured age.
  • Raising the value while long-lived shared row locks continue to generate old MXIDs.
  • Using autovacuum_freeze_max_age instead of the MultiXact-specific maximum when calculating the cap.

autovacuum_multixact_freeze_max_age · vacuum_multixact_freeze_table_age · vacuum_multixact_failsafe_age · vacuum_freeze_min_age · autovacuum · log_autovacuum_min_duration

References