#postgresql
Вопрос:
Существует массивная таблица (~400 млн повторений), количество изменений, поступающих в эту таблицу, составляет от 10 тыс. до 200 тыс. Порог автовакуума и масштабный коэффициент были слишком высоки для запуска автовакуума. Понизил порог, используя ниже
ALTER TABLE schema.table SET (autovacuum_vacuum_scale_factor = 0,autovacuum_vacuum_threshold = 10000,autovacuum_analyze_scale_factor = 0,autovacuum_analyze_threshold = 10000);
Таким образом, до 7/29 6.45 на столе не происходило автовакуума (ниже приведен снимок pg_stat_all_tables, сделанный каждые 15 минут. Похоже, что в то утро поступило ~147 тыс. обновлений, которые должны были вызвать автовакуум примерно 14 раз в зависимости от порога. Чего я не могу понять, так это почему в то утро произошел 921 автовакуум. Увеличивается ли этот счетчик автовакуума и при некоторых других условиях? Из-за большого количества процессов автовакуума, использующих эту таблицу, это повлияло (с точки зрения производительности).
Комментарии:
1. Это, конечно, выглядит странно. Есть ли что — нибудь в файле журнала о пылесосах? Что такое полная версия? Что такое ОС?
2. @jjanes это от rds aurora для postgres 11.6, к сожалению, журналы сделаны, так как журналы rds хранятся в течение нескольких дней в нашей среде. Увеличивается ли количество автовакуума, даже если он не может получить блокировку, необходимую для вакуума? Пытаюсь придумать возможности, которые могли бы привести к такому высокому количеству автовакуума.
3. Стандартный PostgreSQL не увеличивает количество, если он не может получить блокировку. Аврора может быть другой, так как она была сильно изменена, но я не знаю, почему они изменили эту часть. Без файлов журналов я не думаю, что вы можете сделать что-то еще. Возможно, увеличьте объем хранения журнала (и установите
log_autovacuum_min_duration
его ) на случай, если это произойдет снова.