Автовакуум большого стола занимает слишком много времени

Я обновил свой кластер 9.4 postgresql до 9.6. (через pg_upgrade, поэтому моя статистика БД не была перемещена в новый кластер) У меня есть большая таблица (около 450M записей). Эта таблица очень часто используется в моем коде (много отборов и меньше взлетов). Когда я запускаю службу postgres, Postgres автоматически запускает автоочистку, чтобы заблокировать мой стол. Поэтому я ничего не могу сделать: ни обрезать таблицу, ни проанализировать ее вручную. Я попытался установить autovacuum = off в моем конфигурационном файле, но это не помогло (почему?! Я, конечно, перезапустил сервер)

ОБНОВЛЕНИЕ: Моя цель состоит в том, чтобы начать использовать таблицу как можно скорее. Поможет Truncate (так как таблица будет пустой), ANALYZE должен помочь (Postgres начнет использовать правильные индексы)

Какой самый быстрый способ: 1) обрезать таблицу или 2) проанализировать таблицу? Любая помощь приветствуется.

ОБНОВЛЕНИЕ: Вот результат запроса для просмотра блокировок:

SELECT psa.pid,granted,query FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid where locktype='relation';


  pid  | granted | query                                                                                                                          
-------+---------+---------------------------

 11831 | t       | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
 11831 | t       | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
 11831 | t       | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
 11831 | t       | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
 11831 | t       | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
 11831 | t       | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
 11831 | t       | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
 11831 | t       | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
 11831 | t       | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)

Когда я анализирую таблицу из моей консоли psql и вижу данные из pg_stat_activity:

query                  |         backend_start         |          xact_start           |          query_start          |         state_change          | state  | wait_event_type | wait_event
analyze ig_tasks_users;| 2017-01-19 10:03:30.287791+01 | 2017-01-19 10:07:11.683817+01 | 2017-01-19 10:07:11.683817+01 | 2017-01-19 10:07:11.683822+01 | active | Lock            | relation

Если я правильно понимаю, мой VACUUM ANALYZE блокирует таблицу, и мои задачи ANALYZE вручную блокируются. (Это правильно?)

3 ответа

Решение

Запустите truncate в одном сеансе и оставьте его работать, затем откройте новое соединение и завершите все остальные сеансы pg_terminate_backend(pid), Иметь ввиду

  • truncate сотрет все ваши данные из таблицы
  • автовакуум лучше на

Это поможет вам. Попробуйте проанализировать поэтапно.

Если автоматический вакуум занимает слишком много времени, это может быть потому, что вы отключили его на некоторое время.

Обычная цель обычной уборки пылесоса состоит в том, чтобы делать стандартные ВАКУУМЫ достаточно часто, чтобы избежать необходимости ВАКУУМНОГО ПОЛНОГО. Демон autovacuum пытается работать таким образом и фактически никогда не выдаст VACUUM FULL.

Решение медленного вакуума состоит в том, чтобы пылесосить чаще! Также обратите внимание, что установка автоматического выключения может не полностью отключить его.

Другие вопросы по тегам