PostgreSQL: autovacuum — когда и почему убирает

Autovacuum срабатывает, когда количество мёртвых кортежей превышает порог: threshold + scale_factor × n_live_tup По умолчанию: 50 + 0.2 × размер_таблицы. Для большой таблицы это слишком много — bloat накапливается быстро. Настроить на уровне таблицы: ALTER TABLE orders SET ( autovacuum_vacuum_scale_factor = 0.01, autovacuum_vacuum_threshold = 100 ); Смотреть когда последний раз убиралось и сколько мёртвых кортежей сейчас: SELECT relname, n_dead_tup, last_autovacuum, last_autoanalyze FROM pg_stat_user_tables ORDER BY n_dead_tup DESC; autovacuum_naptime (по умолчанию 1 мин) — как часто демон проверяет таблицы. На нагруженных базах снизить до 15s. ...

1 июля 2026 г. · llexa

PostgreSQL: statement_timeout — когда убивать запрос

statement_timeout прерывает запрос, если он работает дольше лимита. Postgres бросает ERROR: canceling statement due to statement timeout. На практике ставят на уровне роли приложения — не глобально: ALTER ROLE app SET statement_timeout = '3s'; -- или на сессию при открытии соединения: SET statement_timeout = '10s'; Глобально в postgresql.conf — риск: попадут VACUUM, REINDEX, ALTER TABLE, pg_dump и запросы обслуживания. Autovacuum и autoanalyze — фоновые воркеры вне сессии, не затронуты. statement_timeout отсчитывает время с начала выполнения, включая ожидание блокировки. Для долгого lock-wait — lock_timeout. Для брошенных транзакций — idle_in_transaction_session_timeout. ...

28 июня 2026 г. · llexa