Postgres Vacuum не освобождает пространство

Вопрос: У меня есть таблица в моей базе данных, которая занимает 161 ГБ места на жестком диске. Осталось всего 5 Гб свободного места на жестком диске 200 ГБ. Следующая команда показывает, что моя таблица потребляет 161 ГБ места на жестком диске, select pg_size_pretty(pg_total_relation_size('Employee')); В таблице около 527 строк. Теперь я удалил 250 строк. Снова я

Вопрос:

У меня есть таблица в моей базе данных, которая занимает 161 ГБ места на жестком диске. Осталось всего 5 Гб свободного места на жестком диске 200 ГБ.

  1. Следующая команда показывает, что моя таблица потребляет 161 ГБ места на жестком диске,
    select pg_size_pretty(pg_total_relation_size(‘Employee’));

  2. В таблице около 527 строк. Теперь я удалил 250 строк. Снова я проверил pg_total_relation_size Employee. Тем не менее размер составляет 161 ГБ.

  3. После просмотра вывода вышеуказанного запроса я выполнил команду вакуума:
    VACUUM VERBOSE ANALYZE Employee;

  4. Я подтвердил, действительно ли ВАКУУМ или нет,
    SELECT relname, last_vacuum, last_autovacuum FROM pg_stat_user_tables; Я вижу последнее время вакуума, соответствующее времени, когда я запускал команду VACUUM.

  5. Я также выполнил команду ниже, чтобы увидеть, есть ли мертвые кортежи,
    SELECT relname, n_dead_tup FROM pg_stat_user_tables; Счет n_dead_tup для таблицы Employee равен 0.

  6. Все еще после всех этих команд, если я забегаю,
    select pg_size_pretty(pg_total_relation_size(‘Employee’)); он по-прежнему показывает 161 ГБ.

Позвольте мне, пожалуйста, знать причину этого. Также, пожалуйста, поправьте меня, как освободить интерфейс.

Лучший ответ:

vacuum не физически “освобождает” пространство. Это означает, что больше не используется пространство, которое можно использовать повторно. Поэтому последующие инструкции UPDATE или INSERT могут использовать это пространство вместо добавления к таблице.

Цитата из руководства

Стандартная форма VACUUM удаляет версии мертвой строки в таблицах и индексах и обозначает пространство, доступное для последующего повторного использования. Тем не менее, он не вернет пространство операционной системе, за исключением специального случая, когда одна или несколько страниц в конце таблицы становятся полностью бесплатными и можно легко получить эксклюзивную блокировку таблицы

(акцент мой)

Если вы повторно вставьте 250 удаленных строк, вы увидите, что таблица не будет расти снова, так как вновь вставленные строки просто используют пространство, которое было выделено свободным vacuum.

Если вы действительно хотите физически уменьшить размер таблицы до требуемого размера, вам необходимо запустить vacuum full.

Цитата из руководства

VACUUM FULL активно объединяет таблицы, записывая полную новую версию файла таблицы без мертвого пространства. Это минимизирует размер таблицы, но может занять много времени. Это также требует дополнительного места на диске для новой копии таблицы, пока операция не завершится

(акцент мой)

Оцените статью
Добавить комментарий