Intermediate Topic 29 of 51 Databases
MVCC
Keeping multiple versions so readers don't block writers.
How it works
Multi-version concurrency control keeps multiple versions of each row, tagged with transaction identifiers or timestamps. A reader sees the version that was visible at its snapshot, so readers never block writers and writers never block readers. Writers create new versions, and a background process such as vacuum removes old versions that no transaction can see. Write conflicts are detected at update or commit time.
Step-by-step walkthrough
- The writer creates a new version of the row.
- The old version stays visible.
- A reader works with the snapshot from its start time.
- It reads version 1 without blocking the writer.
- Old versions are cleaned later by vacuum or garbage collection.
Where it is used
PostgreSQL, MySQL InnoDB, Oracle and many other databases use MVCC to give high concurrency with consistent reads and snapshot isolation.
Common pitfall
Old row versions accumulate if long transactions hold snapshots open, causing table bloat and slower scans. Write skew is possible under snapshot isolation. Updates are effectively inserts of new versions, which affects index and storage costs. Monitor long-running transactions and autovacuum, and use serializable mode or explicit locks where invariants span rows.
Where it fits in the course
MVCC is topic 29 of 51 in Databases, rated Intermediate. It follows Locking and Two-Phase Locking. The next topic is Stored Procedures and Triggers.
Practice and explore
- Open the interactive lesson, with a mini quiz.
- Take the Databases quiz.
How to study this topic
- Read the explanation above and restate the definition in your own words.
- Open the interactive lesson and answer its mini quiz.
- Read the common pitfall, then write a short example that avoids it.
- Check your understanding in the Databases quiz, and revisit the topic if you miss a question.
Frequently asked questions
What is MVCC?
Where do people use MVCC?
What is the most common mistake with MVCC?
What should I learn before this topic?
How can I practice it?
Is MVCC hard to learn?
How long does it take to learn MVCC?
Which topics are related to MVCC?
What should I study after MVCC?
Related topics
- Locking and Two-Phase Locking (Databases)
- Stored Procedures and Triggers (Databases)
- Concurrency Control (Databases)
- Query Optimization (Databases)