Ты радостно делаешь
DELETE FROM logs, ждёшь освобождения диска, но ничего не происходит. Современные базы данных нас обманывают.⚙️ Почему база ничего не удаляет
🔹 В PostgreSQL и MySQL работает механизм MVCC (многоверсионность).
🔹 При операции
DELETE физического стирания нет. База просто ставит на строку невидимую метку «удалено».🔹 Это как вычеркнуть запись ручкой в блокноте: прочитать её уже нельзя, но физическое место на странице она всё ещё занимает.
📉 Зачем нужны «мёртвые зоны»
Ради безопасности и параллельной работы. Пока ты удаляешь записи, другой процесс может строить по ним отчёт. База заботливо хранит старую версию данных, пока все текущие запросы не завершатся.
🚀 Как реально освободить диск
Встроенные фоновые процессы очищают старые метки и отдают место внутри таблицы для новых строк, но не возвращают его операционной системе. Чтобы ужать файл и вернуть гигабайты диску, нужны команды:
🔹 В PostgreSQL:
VACUUM FULL logs;
🔹 В MySQL:
OPTIMIZE TABLE logs;
⚠️ Осторожно: эти команды полностью блокируют таблицу на всё время своей работы.
💡 Операция DELETE только прячет данные, а реальное место возвращают лишь тяжёлые команды полного сжатия.




