PostgreSQL использует MVCC (Multi-Version Concurrency Control) — при обновлении строки старая версия не удаляется, а помечается как «мёртвая» (dead tuple). Это обеспечивает изоляцию транзакций, но создаёт проблему: «мёртвые» строки накапливаются и занимают место.
VACUUM выполняет три критические функции:
- Освобождение места — помечает пространство «мёртвых» строк как доступное для повторного использования
- Обновление статистики — обновляет карту видимости (visibility map) для Index-Only Scans
- Предотвращение Transaction ID Wraparound — замораживает старые ID транзакций, предотвращая катастрофическую потерю данных
Без VACUUM база будет расти бесконтрольно, запросы замедлятся из-за чтения «мёртвых» строк, а через ~2 миллиарда транзакций PostgreSQL принудительно остановится для предотвращения wraparound.
Оставить комментарий