Skip to content

Conversation

@korlenko
Copy link

@korlenko korlenko commented Jan 5, 2026

…ge()

Description
This PR fixes an incorrect calculation in the postgres_xacts_left_before_wraparound metric related to MultiXact IDs. Currently, the query uses the age() function for values derived from datminmxid. However, according to the PostgreSQL documentation, age() is intended for transaction IDs (XID) and must not be used for MultiXact IDs (MXID).

PostgreSQL provides a dedicated function for this purpose: "mxid_age (xid) → integer
Returns the number of multixact IDs between the supplied multixact ID and the current multixacts counter." — PostgreSQL Documentation - https://www.postgresql.org/docs/14/functions-info.html

Using age(datminmxid) results in incorrect values because it implicitly treats a MultiXact ID as a transaction ID, which leads to inflated ages and false wraparound alerts.

This PR replaces age() with mxid_age() for the MultiXact-related part of the metric, which aligns the calculation with PostgreSQL documentation and eliminates false positives.

…ge()

Description
This PR fixes an incorrect calculation in the postgres_xacts_left_before_wraparound metric related to MultiXact IDs.
Currently, the query uses the age() function for values derived from datminmxid. However, according to the PostgreSQL documentation, age() is intended for transaction IDs (XID) and must not be used for MultiXact IDs (MXID).

PostgreSQL provides a dedicated function for this purpose:
"mxid_age (xid) → integer
Returns the number of multixact IDs between the supplied multixact ID and the current multixacts counter."
— PostgreSQL Documentation - https://www.postgresql.org/docs/14/functions-info.html

Using age(datminmxid) results in incorrect values because it implicitly treats a MultiXact ID as a transaction ID, which leads to inflated ages and false wraparound alerts.

This PR replaces age() with mxid_age() for the MultiXact-related part of the metric, which aligns the calculation with PostgreSQL documentation and eliminates false positives.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant