Удалили миллион строк, а место на диске не вернулось Ты радостно… — SQL Academy: всё о реляционных БД и SQL — TG.ME

🗑 Удалили миллион строк, а место на диске не вернулось

Ты радостно делаешь DELETE FROM logs, ждёшь освобождения диска, но ничего не происходит. Современные базы данных нас обманывают.

⚙️ Почему база ничего не удаляет
🔹 В PostgreSQL и MySQL работает механизм MVCC (многоверсионность).
🔹 При операции DELETE физического стирания нет. База просто ставит на строку невидимую метку «удалено».
🔹 Это как вычеркнуть запись ручкой в блокноте: прочитать её уже нельзя, но физическое место на странице она всё ещё занимает.

📉 Зачем нужны «мёртвые зоны»
Ради безопасности и параллельной работы. Пока ты удаляешь записи, другой процесс может строить по ним отчёт. База заботливо хранит старую версию данных, пока все текущие запросы не завершатся.

🚀 Как реально освободить диск
Встроенные фоновые процессы очищают старые метки и отдают место внутри таблицы для новых строк, но не возвращают его операционной системе. Чтобы ужать файл и вернуть гигабайты диску, нужны команды:
🔹 В PostgreSQL:
VACUUM FULL logs;

🔹 В MySQL:
OPTIMIZE TABLE logs;

⚠️ Осторожно: эти команды полностью блокируют таблицу на всё время своей работы.

💡 Операция DELETE только прячет данные, а реальное место возвращают лишь тяжёлые команды полного сжатия.
👍16🤯7❤2🔥2
July 8, 2026 5K 14