Заметки по PostgreSQL, которые я постоянно забываю
Шпаргалка для себя. Всё это я знал, всё это забывал, и всё это каждый раз гуглил заново. Теперь будет под рукой.
Автовакуум
Не выключайте его. Серьёзно. Если кажется, что он мешает — значит либо настроен неправильно, либо вы неправильно понимаете, что он делает. Смотреть, как он работает:
SELECT relname, last_autovacuum, n_dead_tup, n_live_tup
FROM pg_stat_user_tables
WHERE n_dead_tup > 10000
ORDER BY n_dead_tup DESC;
Если n_dead_tup растёт, а last_autovacuum
давно не менялся — стоит проверить autovacuum_max_workers
и порог. По умолчанию он 20% от таблицы, что для больших
таблиц может значить очень и очень долго.
Проверить, что вообще происходит
SELECT pid, state, query_start, wait_event_type, wait_event, query
FROM pg_stat_activity
WHERE state != 'idle'
ORDER BY query_start;
Если видите wait_event_type = 'Lock' — кто-то кого-то
ждёт. Дальше уже ищете по pg_locks, кто конкретно
виноват. Классика.