Мониторинг баз данных - это множество инструментов и методов, используемых для создания и обслуживания инфраструктуры приложения, обладающих высокой доступностью и скоростью работы.
В случае с PostgreSQL существует множество встроенных представлений (view) и системных таблиц, которые позволяют получить разностороннюю информацию о текущем состоянии базы данных.
Мониторинг необходим не только для предупреждения сбоев, но и для быстрого выявления аномалий в поведении пользователей или приложений. Например, мониторинг может выявить подозрительно активного клиента, создающего чрезмерную нагрузку, или показать, что дисковое пространство заканчивается, а количество одновременных подключений приближается к лимиту
Ключевые параметры, которые следует отслеживать при мониторинге PostgreSQL:
SELECT sum(numbackends) FROM pg_stat_database;
)pg_relation_size
, pg_total_relation_size
)uptime = now() - pg_postmaster_start_time()
Для общего анализа состояния системы используются дашборды — визуальные панели, которые агрегируют метрики и представляют их в виде графиков и таблиц. Это позволяет быстро выявить появившиеся узкие места или сбои
pg_stat_database
— агрегированные статистики по каждой базе данных:
pg_stat_statements
— расширение, позволяющее анализировать производительность SQL-запросов:
Важно: pg_stat_statements
нужно установить и включить отдельно
pg_stat_activity
— отображает текущее состояние всех подключений. Позволяет увидеть:
Этот системный вид часто называют «лучшим другом DBA», так как он позволяет быстро определить, кто “тормозит” систему прямо сейчас
Понимание размера таблиц и индексов позволяет оценить, насколько они влияют на производительность:
pg_relation_size('имя_таблицы')
— размер самой таблицы (без индексов)pg_total_relation_size('имя_таблицы')
— общий размер таблицыЕсли таблица большая, а индексов нет или они не используются, это может привести к медленным SELECT
-запросам. В таком случае мониторинг количества неиндексированных сканирований подскажет, что стоит пересмотреть стратегию индексации
pg_stat_kcache
(дополнительное расширение) позволяет анализировать использование CPU, системных вызовов и чтения из файловой системы на уровне отдельных запросовpg_stat_bgwriter
, pg_stat_user_tables
и через функции pg_stat_progress_vacuum
Часто, именно оптимизация SQL-запросов даёт больший прирост производительности, чем масштабирование железа. Например, неэффективные JOIN
-инструкции или отсутствующие WHERE
-условия могут сильно нагружать систему
Существует множество инструментов и экосистем для сбора и отображения метрик:
Чтобы подключить PostgreSQL к этим инструментам, используются экспортеры:
Экспортеры запускаются как отдельные процессы (или контейнеры) и предоставляют API, с которого Prometheus или другой сборщик метрик может регулярно забирать данные
Таким образом, экспортер, например, postgres_exporter предоставляет интерфейс для системы сбора Prometheus, которая по сути является БД поменьше и которая забирают данные и статистики базы данных. Далее Grafana собирает эти данные и агрегирует в удобный дашборд