PostgreSQL uses transaction IDs (also called TXIDs or XIDs) to implement Multi-Version Concurrency Control semantics (MVCC).
To prevent transaction ID wraparound, PostgreSQL uses a vacuum mechanism, which operates as a background task called autovacuum (enabled by default), or it can be run manually using the VACUUM command. A vacuum operation freezes committed transaction IDs and releases them for further use. You can think of this mechanism as "recycling" of transaction IDs that keeps the database operating despite using a finite number to store the transaction ID.
Vacuum can sometimes be blocked due to workload patterns, or it can become too slow to keep up with database activity. If transaction ID utilization continues to grow despite the freezing performed by autovacuum or manual vacuum, the database will eventually refuse to accept new commands to protect itself against TXID wraparound. To help you monitor your database and ensure that this doesn't happen, Cloud SQL for PostgreSQL introduced three new metrics:
- transaction_id_utilization
- transaction_id_count
- oldest_transaction_age
Read further Monitor transaction ID utilization in Cloud SQL PostgreSQL | Google Cloud Blog