Ответ
Нет, место на диске не освобождается немедленно. Удаленная запись обычно помечается как неиспользуемая, и это пространство становится доступным для последующих операций INSERT или UPDATE в рамках той же таблицы.
Типичное поведение СУБД (на примере InnoDB в MySQL):
DELETEпомечает строку как удаленную в структуре данных (например, в B-дереве).- Физическое пространство на диске не возвращается файловой системе.
- Помеченное пространство остается в табличном пространстве для повторного использования.
Как освободить место операционной системе? Требуется явная операция по дефрагментации и сжатию таблицы:
- MySQL (InnoDB):
OPTIMIZE TABLE table_name; - PostgreSQL:
VACUUM FULL table_name; - Общий подход: Перестройка таблицы:
ALTER TABLE table_name ENGINE=InnoDB;
Пример для MySQL:
-- Удаление данных
DELETE FROM large_table WHERE created_at < '2020-01-01';
-- Освобождение и дефрагментация пространства (блокирует таблицу)
OPTIMIZE TABLE large_table;
Рекомендация: Операции типа OPTIMIZE TABLE выполняются с блокировками и нагружают диск. В production их следует планировать на время минимальной нагрузки.