field as compared to
<xref linkend="guc-autovacuum-multixact-freeze-max-age"/>. Furthermore,
this component increases greatly once the age surpasses
- <xref linkend="guc-vacuum-multixact-failsafe-age"/>. The final value
- for this component can be adjusted via
+ <xref linkend="guc-vacuum-multixact-failsafe-age"/> or when the number
+ of multixact member entries created exceeds approximately 2 billion
+ entries (see <xref linkend="vacuum-for-multixact-wraparound"/>). The
+ final value for this component can be adjusted via
<xref linkend="guc-autovacuum-multixact-freeze-score-weight"/>. Note
that increasing this parameter's value also lowers the age at which this
component begins scaling aggressively, i.e., the scaling age is divided
* One exception to the previous paragraph is for tables nearing wraparound,
* i.e., those that have surpassed the effective failsafe ages. In that case,
* the relfrozenxid/relminmxid-based score is scaled aggressively so that the
- * table has a decent chance of sorting to the front of the list.
+ * table has a decent chance of sorting to the front of the list. Furthermore,
+ * the relminmxid-based score is scaled aggressively as
+ * effective_multixact_freeze_max_age is lowered due to high multixact member
+ * space usage.
*
* To adjust how strongly each component contributes to the score, the
* following parameters can be adjusted from their default of 1.0 to anywhere
/*
* To calculate the (M)XID age portion of the score, divide the age by its
- * respective *_freeze_max_age parameter.
+ * respective *_freeze_max_age parameter. The multixact_freeze_max_age
+ * variable might be 0 here (i.e., a division-by-zero hazard), so in that
+ * case we use the mxid_age as the MXID score.
*/
xid_age = TransactionIdIsNormal(relfrozenxid) ? recentXid - relfrozenxid : 0;
mxid_age = MultiXactIdIsValid(relminmxid) ? recentMulti - relminmxid : 0;
scores->xid = (double) xid_age / freeze_max_age;
- scores->mxid = (double) mxid_age / multixact_freeze_max_age;
+ scores->mxid = (double) mxid_age / Max(1, multixact_freeze_max_age);
/*
* To ensure tables are given increased priority once they begin