@sargonpiraev

MVCC

Created 1 min readseed · 1/5#database

Multi-version concurrency control (MVCC) lets readers and writers avoid blocking each other as often by keeping multiple versions of rows visible to different transactions, instead of locking every read.

Updates typically create a new row version and mark old versions obsolete; deletes mark versions dead without immediately reclaiming disk space.

Systems need cleanup (vacuum, compaction, merge) so obsolete versions do not grow without bound and so transaction IDs do not wrap in dangerous ways.

For how PostgreSQL’s row versions, VACUUM, and bloat relate in practice, see Postgres VACUUM.