MVCC и снимки транзакций

Зачем это знать:

  • Объясняет, почему UPDATE/DELETE не “удаляет сразу”.

  • Объясняет bloat, autovacuum, и почему длинные транзакции опасны.

Связанные темы:

VACUUM, Autovacuum и bloat

Блокировки, уровни изоляции и дедлоки

WAL, Checkpoint и восстановление


Суть MVCC

  • Читатели не блокируют писателей (и наоборот) в типичных сценариях.

  • Вместо “перезаписать строку” PostgreSQL чаще создаёт новую версию.

  • Видимость версий определяется снимком транзакции (snapshot).


Практические последствия

  • Длинные транзакции удерживают старые версии “живыми” ⇒ VACUUM не может их убрать ⇒ растёт bloat.

  • Частые UPDATE одной и той же строки ⇒ много “мёртвых” версий ⇒ нагрузка на VACUUM.

  • “SELECT без нужды в транзакции” и “забыли COMMIT” — типовая причина деградации.

Последнее обновление