З'єднання:
- кількість активних і простоюючих з'єднань щодо
max_connections; - сесії в стані
idle in transactionі їхня тривалість; - очікування блокувань (
wait_event_type = 'Lock').
Запити:
- найдорожчі запити за сумарним і середнім часом (
pg_stat_statements); - кількість повільних запитів (
log_min_duration_statement); - найдовший запит і найстаріша відкрита транзакція.
Кеш і ввід-вивід:
- коефіцієнт попадання в кеш (
blks_hit/blks_readуpg_stat_database); - тимчасові файли (
temp_files,temp_bytes) - сортування й хеші на диску через нестачуwork_mem; - навантаження на диск на рівні ОС.
Обслуговування:
- мертві рядки й час останнього вакууму для великих таблиць (
pg_stat_user_tables); - вік найстарішої транзакції -
age(datfrozenxid)- захист від переповнення лічильника; - розмір таблиць і індексів, темп їх зростання.
Реплікація:
- затримка реплік у байтах і секундах (
pg_stat_replicationна primary); - неактивні слоти реплікації й обсяг WAL, який вони утримують (
pg_replication_slots).
Ресурси сервера: CPU, пам'ять, вільне місце на диску для даних і для WAL, кількість контрольних точок (checkpoints_req проти checkpoints_timed - часті вимушені контрольні точки означають замалий max_wal_size).
Інструменти: postgres_exporter + Prometheus + Grafana, pganalyze, Datadog, моніторинг керованих сервісів (RDS Performance Insights).
Сповіщення варто налаштувати насамперед на те, що веде до аварії: місце на диску, кількість з'єднань близько до ліміту, затримка реплікації, вік транзакцій, неактивні слоти реплікації. Решта метрик - для розслідування й планування.