Перейти к основному содержимому

PostgreSQL

Мониторинг PostgreSQL должен охватывать ключевые компоненты СУБД, чтобы обеспечивать стабильность, производительность и отказоустойчивость. Важно собирать информацию о структуре и состоянии компонентов PostgreSQL.

Памир понимает структуру PostgreSQL и строит его сервисно-ресурсную модель (СРМ). СРМ PostgreSQL - это иерархическая структура, которая описывает компоненты СУБД и их взаимосвязи. Она помогает систематизировать мониторинг, управление и планирование ресурсов.

Уровни модели СРМ

СРМ PostgreSQL можно представить в виде иерархии:

Тип сервера (кластер)  

├── ✅Сервер (экземпляр PostgreSQL)
│ │
│ ├── ✅База данных (Database)
│ │ │
│ │ ├── ✅Схема (Schema)
│ │ │ │
│ │ │ ├── ✅Таблица (Table)
│ │ │ │ ├── Индексы
│ │ │ │ ├── Триггеры
│ │ │ │ └── Ограничения (Constraints)
│ │ │ │
│ │ │ └── Представления (Views)
│ │ │
│ │ └── Роли (Roles)
│ │
│ ├── Пользователи (Users)
│ ├── Репликация (Replication)
│ └── Настройки (postgresql.conf)

└── Физические ресурсы (CPU, RAM, Disk, Network)

✅ - отмечены уровни, включены в шаблон мониторинга PostgreSQL. Ниже приведены описания уровней модели.

PostgreSQL

Атрибуты:

  • Название: Имя сервера СУБД.
  • Наименование КЕ: Отображаемое имя СУБД на дашбордах и графе.
  • IP адрес: IP-адрес сервера PostgreSQL.
  • Версия: версия установленной СУБД PostgreSQL.
  • База Данных: Имя базы данных.

База данных

Атрибуты:

  • Название: Имя базы данных.
  • Наименование КЕ: Отображаемое имя базы данных на дашбордах и графе.

Схема

Атрибуты:

  • Название: Имя схемы.
  • Наименование КЕ: Отображаемое имя схемы на дашбордах и графе.

Таблица

Атрибуты:

  • Название: Имя таблицы.
  • Наименование КЕ: Отображаемое имя таблицы на дашбордах и графе.

Пример СРМ, на котором видны взаимосвязи между сервером PostgreSQL, базой данных, схемой и таблицами. Graph

СРМ как основа для мониторинга

СРМ PostgreSQL задает иерархию объектов (сервер → БД → схема → таблица), для каждого из которых собираются метрики.

Механизм сбора метрик

Сбор метрик осуществляется двумя экспортерами:

  • PostgreSQL: собирает системные метрики СУБД PostgreSQL.
  • SQL: выполняет пользовательские SQL-запросы для получения специализированных метрик.

Метрики по уровню CRM

Подключения

Метрики подключения отображают текущее число активных подключений к СУБД и максимальное допустимое число подключений.
Уровень СРМ: Сервер PostgreSQL

Примеры метрик:

  • pg_settings_max_connections – максимальное число подключений, установленное в конфигурации.
  • pg_stat_database_numbackends – текущее число активных подключений к базе данных.

Количество активных подключений отображается на виджете прогресс-бар.
Соединения Виджет


Транзакции

Метрики транзакций отражают общее число завершённых транзакций (commit/rollback) за заданный период.
Уровень СРМ: База данных

Примеры метрик:

  • pg_stat_database_xact_commit – число выполненных транзакций commit.
  • pg_stat_database_xact_rollback – число выполненных транзакций rollback.

Динамика транзацкций отображается на виджете линейный график. Транзакции Виджет


Блокировки

Метрики блокировок показывают общее число активных блокировок, что помогает выявить конфликты между транзакциями.
Уровень СРМ: База данных

Пример метрики:

  • pg_locks_count – суммарное число блокировок на сервере.

Динамика по блокировкам отображается на виджете линейный график. Блокировки Виджет


Операции INSERT/RETURN/UPDATE/DELETE

Метрики операций фиксируют изменения в таблицах — вставку, выборку, обновление и удаление строк.
Уровень СРМ: База данных

Пример метрики:

  • pg_stat_database_tup_inserted – количество вставленных кортежей.
  • pg_stat_database_tup_returned – количество возвращённых строк.
  • pg_stat_database_tup_updated – количество обновлённых кортежей.
  • pg_stat_database_tup_deleted – количество удалённых кортежей.
  • sql_state_transactioncs – метрика для контроля специфичных транзакционных операций.

Динамика операций отображается на виджете линейный график. Операции Виджет


Autovacuum

Метрики автовакуума фиксируют активность процессов очистки, включая число «мертвых» кортежей и состояние заморозки транзакций.
Уровень СРМ: База данных, Схема, Таблица

Примеры метрик:

  • sql_dead_tuples – количество «мертвых» кортежей.
  • sql_frozen_transaction – число замороженных транзакций.

Активность процессов автовакуумирования отображается в сводной таблице
Autovacuum Виджет


Размер базы данных

Метрики размера базы данных показывают общий объём данных и индексов.
Уровень СРМ: База данных, Схема, Таблица

Примеры метрик:

  • pg_database_size_bytes – общий размер базы данных в байтах.
  • sql_pg_relation_size – размер конкретной таблицы вместе с индексами.

Размер базы данных, а также объёмы по каждой схеме и таблице отображется в сводной таблице
Размер базы данных Виджет


Дополнительные метрики, статус сервера и настройки

Эти метрики позволяют отслеживать конфигурационные параметры, версию СУБД и общее состояние сервера.
Уровень СРМ: Сервер PostgreSQL

Примеры метрик:

  • Метрики из pg_settings_* – настройки памяти, таймауты и другие параметры.
  • version() – информация о версии PostgreSQL.
  • pg_up – индикатор доступности сервера.
  • pg_settings_shared_buffers_bytes – размер разделяемых буферов.
  • pg_settings_effective_cache_size_bytes – оценка объёма доступной памяти для кеширования.

Состояние сервера и настройки отображаются на виджете SingleValue.
Дополнительные метрики Виджет

Как СРМ помогает в мониторинге?

Определение ключевых метрик

Для каждого уровня СРМ выделяются критические метрики:

  • Сервер:
    • Загрузка CPU > 90% → алерт.
    • max_connections близко к лимиту → риск отказа.
  • Таблица:
    • n_dead_tup > 20% от n_live_tup → требуется VACUUM.
    • seq_scan >> idx_scan → нехватка индексов.

Приоритизация проблем

СРМ позволяет выявлять проблемные уровни:

  1. Если нагрузка на сервер высокая → смотрим БД с максимальными транзакциями.
  2. Если проблема в БД → анализируем таблицы с высокой активностью.
  3. Если тормозит таблица → проверяем индексы и запросы.

Индикаторы здоровья

Активные подключения

Указывают на ситуацию, когда число активных подключений приближается к лимиту, что может привести к отказу новых соединений.

Уровень СРМ: сервер PostgreSQL
Метрика: pg_stat_database_numbackends / pg_settings_max_connections_ratio
Порог: > 0.8 (80% от max_connections)
Причины:

  • Утечки подключений в приложении.
  • Недостаточное число max_connections для текущей нагрузки.

Эффективность кеширования

Демонстрируют снижение эффективности кеширования, сигнализируя о необходимости перераспределения памяти или оптимизации запросов.

Уровень СРМ: сервер PostgreSQL
Метрика: Соотношение блоков хита к сумме блоков хита и чтения (на основе pg_stat_database_blks_hit и pg_stat_database_blks_read)
Порог: < 0.70 (70%)
Причины:

  • Недостаточно выделенной памяти для кеша (например, низкий shared_buffers).
  • Частые полные сканирования таблиц, свидетельствующие о неэффективном использовании индексов.

Длительные запросы

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

Уровень СРМ: сервер PostgreSQL
Метрика: pg_stat_activity_max_tx_duration
Порог: > 300 секунд (5 минут)
Причины:

  • Медленные или зависшие запросы из-за неоптимальных планов.
  • Проблемы с производительностью отдельных операций.

Количество запросов в секунду

Отслеживают нагрузку на сервер, что позволяет своевременно реагировать на перегрузки и оптимизировать работу СУБД.

Уровень СРМ: сервер PostgreSQL
Метрика: Сумма скорости (irate) транзакций commit и rollback
Порог: > 10,000 запросов/сек
Причины:

  • Чрезмерная нагрузка, приводящая к перегрузке сервера.
  • Неоптимизированные запросы, увеличивающие общий объём операций.

Статус сервера PostgreSQL

Отражают доступность СУБД, позволяя оперативно реагировать на сбои и проблемы с сетью.

Уровень СРМ: сервер PostgreSQL
Метрика: pg_up
Порог: 0 (если сервер недоступен)
Причины:

  • Аварийное состояние СУБД.
  • Проблемы с сетью или конфигурацией, приводящие к отсутствию отклика сервера.

Дашборды

Дашборд сервера PostgreSQL отображает показатели:

  • текущее количество соединений,
  • число транзакций,
  • активность блокировок,
  • операции INSERT/RETURN/UPDATE/DELETE.

Скриншот дашборда Dashboard


Показатели работы сервера PostgreSQL в части autovacuum и Frozen Transaction вынесены в отдельный дашборд. На дашборде отображаются показатели:

  • Число «мертвых» кортежей (Dead Tuples)
  • Возраст транзакций (Frozen Transaction)
  • Время с момента последнего вакуума
  • Активность процессов автовакуумирования (Autovacuum)

Скриншот дашборда Dashboard

Файлы конфигурации

  • TKE-конфигурация – Конфигурационный файл, описывающий TКЕ.
  • Шаблон – Шаблон метрик и индикаторов здоровья.
  • Дашборды – Файл конфигурации дашбордов.
  • Экспортер – Файл настроек экспортёров для сбора метрик PostgreSQL.