Назад | Перейти на главную страницу

Автоматически запускать ANALYZE в PostgreSQL?

Какой самый простой способ автоматически запускать ANALYZE <table>; на сервере PostgreSQL 12, кроме cronjob?

У меня есть приложение, в которое каждую неделю обычно вставляются миллионы строк, и через месяц или около того время запросов становится очень медленным, потому что статистика для изменяемых первичных таблиц устарела. Бег ANALYZE <table>; для таблиц занимает пару минут и немедленно устраняет проблемы с производительностью, но я считаю, что должна быть настройка, которую я могу сделать, чтобы это можно было сделать автоматически самим PG-сервером, а не вручную?

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

Самое простое решение - снова включить автовакуум. Проверьте свой файл postgresql.conf на предмет настройки автоочистки.

PostgreSQL имеет встроенный автозапуск, который следует включить и настроить в соответствии с вашими потребностями. Обычно вы настраиваете * autovacuum_vacuum_threshold * и autovacuum_analyze_threshold для запуска желаемого поведения в зависимости от количества измененных кортежей.

Видеть https://www.postgresql.org/docs/current/routine-vacuuming.html#AUTOVACUUM