Мы запускаем PostgreSQL 9.3 на платформе AWS RDS. Каждую ночь в час ночи мы запускали глобальную задачу VACUUM ANALYZE
.
Вчера мы наблюдали серьезное снижение производительности, и, как оказалось, за последние 5 дней у нас зависло 5 VACUUM ANALYZE
процессов. За тот же период использование диска увеличилось на 45 гигабайт.
Я убил его с помощью pg_terminate_backend
, но это не оказало большого влияния. Процессы выглядели мертвыми, но производительность по-прежнему сильно снижалась. Поскольку мы используем AWS RDS, мы выполнили перезагрузку с аварийным переключением, и производительность сразу же значительно улучшилась.
Сегодня утром я проверил и обнаружил, что VACUUM ANALYZE
снова застрял на 5 часов. Я убил его, но подозреваю, что он все еще где-то там.
После дальнейшего изучения я подтвердил, что auto_vacuum
включен правильно, что означает, что нам не нужно запускать вручную VACUUM
, но нам может потребоваться запустить ANALYZE
для некоторых или всех таблиц.
В своем исследовании я нашел эту статью: http://rhaas.blogspot.com/2011/03/troubleshooting-stuck-vacuums.html и http://wiki.postgresql.org/wiki/Introduction_to_VACUUM,_ANALYZE,_EXPLAIN,_and_COUNT .
В итоге у меня следующие вопросы:
- Правильно ли не запускать ручной VACUUM с включенным auto_vacuum?
- Как я могу отслеживать ход и производительность auto_vacuum? Как я узнаю, что он не застрял в том же месте, что и ручной ПЫЛЕСОС?
- Нужно ли мне по-прежнему запускать ANALYZE на регулярной основе?
- Есть ли способ включить автоматический ANALYZE, аналогичный auto_vacuum?