MVCC (Multi-Version Concurrency Control) cho phép nhiều transaction đọc/ghi đồng thời mà đọc không chặn ghi và ghi không chặn đọc. Thay vì khoá để serialize, DB giữ nhiều phiên bản của mỗi hàng.
Cách PostgreSQL làm:
- Mỗi UPDATE không sửa tại chỗ mà tạo phiên bản hàng mới (tuple), đánh dấu phiên bản cũ hết hạn.
- Mỗi transaction thấy một snapshot nhất quán tương ứng thời điểm bắt đầu (theo isolation level) → transaction đọc vẫn thấy phiên bản cũ trong khi transaction khác ghi phiên bản mới.
Lợi: concurrency cao, đọc nhất quán không cần khoá đọc. Cái giá — bloat: phiên bản cũ (dead tuple) tích lại, cần VACUUM dọn để thu hồi không gian và tránh transaction-id wraparound. MVCC cũng là nền tảng cho các mức isolation trong Postgres.