Postgres autovacuum не освобождает дисковое пространство - PullRequest
0 голосов
/ 20 марта 2019

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

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

Autovacuum "on" с настройкой по умолчанию. Запрос на удаление выполняется в 2:55 ночи. Последний автовакуум для стола - примерно через 3 часа, 6:32 и второй прогон не выполняется.

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

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

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

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

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

1 Ответ

0 голосов
/ 20 марта 2019

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

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

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

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

Проверьте вывод

SELECT * FROM pg_stat_user_tables
WHERE relname = 'prablemtable';

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

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

...