PostgreSQL's MVCC stores two 32-bit XIDs per tuple - xmin and xmax. The transaction snapshot decides visibility per tuple. Updates append new tuples and mark the old with xmax. VACUUM reclaims versions only when no active snapshot can see them. Long-running REPEATABLE READ snapshots pin versions and cause bloat.
Why it matters: Long-running REPEATABLE READ snapshots pin tuple versions. Teams must watch idle transactions and tune autovacuum or switch isolation levels to avoid bloat and extra I/O.










