Postgres autovacuum не освобождает дисковое пространство

#postgresql #autovacuum

#postgresql #автовакуум

Вопрос:

У меня есть база данных, где в одной таблице у меня более 8 миллионов вставок каждый день (записи распределяются по времени, примерно 90-100 в секунду).

И каждый день я удаляю все записи старше 7 дней, но дисковое пространство для таблицы не перестает расти.

Автовакуум «включен» в конфигурации по умолчанию. Запрос на удаление выполнен в 2:55 ночи. Последний автовакуум для стола примерно через 3 часа в 6:32, второго запуска нет.

Почему дискового пространства каждый день становится примерно на 1 гб больше?

Теперь autovacuum не освобождает дисковое пространство сразу, но я могу использовать удаленные строки для новых вставок.

Прямо сейчас кажется, что я удаляю записи, но я не использую свободное пространство для новых, и таблица продолжает расти.

Каждый день после удаления старых записей в таблице остается около 50 миллионов строк, и они почти не отличаются от сохраненного размера.

Возможно ли, что Postgres хочет достичь определенного размера для таблицы, которой, по его мнению, он может манипулировать без проблем? Я не пробую это, потому что свободного места не так много, и когда пространство заполнено, я TRUNCATE закрываю таблицу.

Ответ №1:

Вы имеете в виду размер таблицы, а не объем памяти, верно?

Во-первых, некоторые общие моменты, которые вы должны проверить, чтобы определить проблему:

Установите log_autovacuum_min_duration значение, отличное от -1, и посмотрите, генерируются ли сообщения.

Следите за процессами autovacuum в pg_stat_activity . Есть ли какие-либо запущенные в вашей проблемной таблице?

Изучите выходные данные

 SELECT * FROM pg_stat_user_tables
WHERE relname = 'prablemtable';
  

Что такое n_live_tup и n_dead_tup ?
Что такое autovacuum_count и last_autovacuum ?

Я подозреваю, что autovacuum запущен, но не может выполнять свою работу, потому что одна из этих трех причин мешает его очистке: