Let Snapshots See Different Row Versions
MVCC (multi-version concurrency control) keeps multiple versions of a row so that readers and writers never block each other. For example, when a row is updated from v1 to v2, v1 remains available for readers whose snapshot still needs it. Read Committed takes a snapshot per statement, while Repeatable Read keeps a stable transaction snapshot, and old versions are reclaimed once no snapshot needs them.
Why does a normal reader usually not block a writer in MVCC?