Отчетность по нагрузке СУБД Pangolin
Функциональность доступна только для редакций Enterprise и Enterprise для ERP-систем.
Описание
Отчетность по нагрузке Pangolin — это механизм анализа производительности кластера СУБД, предназначенный для накопления исторической статистики и формирования отчетов по нагрузке за произвольный период времени.
Функциональность реализована на базе расширения pg_profile и предназначена для:
- анализа причин деградации производительности;
- выявления «горячих» объектов (таблиц, индексов, запросов);
- анализа пиковых нагрузок;
- ретроспективного анализа работы СУБД без прерывания сервисов;
- архитектурного и DDL-уровня планирования оптимизаций.
Назначение
В стандартной поставке PostgreSQL доступны представления семейства pg_stat_%, а также утилиты, работающие в режиме реального времени. Однако для анализа нагрузки за прошедший период требуется дополнительное накопление статистики. Отчетность по нагрузке Pangolin решает эту задачу за счет регулярной выборки и сохранения статистики во внутреннем хранилище.
Доработки также нацеленные на более точное определение размера отношений, поскольку поля pg_class.relpages, pg_class.relblocks обновляются только в результате работы VACUUM, ANALYZE или автоочистки, что не отражает достоверных размеров отношений.
Принцип работы
При установке расширения pg_profile в базе данных создается набор служебных таблиц, формирующих историческое хранилище статистики. Это хранилище будет накапливать статистические выборки с кластера СУБД.
Сбор данных осуществляется посредством вызова функции take_sample(). Выборки могут выполняться:
- вручную;
- по расписанию (с использованием
cronили расширенияpg_cron).
Каждая выборка фиксирует состояние статистических представлений на момент сбора. В дальнейшем отчеты формируются путем сравнения двух выборок, что позволяет получить профиль нагрузки за заданный интервал времени.
Например, при выявлении деградации производительности, произошедшей несколько часов назад, можно построить отчет между выборками, охватывающими проблемный интервал, и определить характер нагрузки в этот период. Для определения точного времени возникновения проблемы рекомендуется использовать внешнюю систему мониторинга (например, Zabbix).
Дополнительно возможно сохранять выборки непосредственно перед запуском бизнес-задачи (блока транзакций) и после ее завершения для анализа влияния конкретной нагрузки на систему.
Взаимодействие с расширениями
Расширение pg_profile использует данные следующих модулей:
pg_stat_statements;pg_stat_activity;pg_stat_kcache(при наличии).
При сохранении выборки вызывается функция pg_stat_statements_reset() для предотвращения потери статистики в случае достижения лимита pg_stat_statements.max. В отчете дополнительно отображается информация о достижении 90% от значения параметра pg_stat_statements.max.
Для подключения к удаленным кластерам используется расширение dblink. При установке pg_profile автоматически создается локальный сервер, соответствующий текущему кластеру.
Ограничения функциональности
Функциональность имеет следующие ограничения:
- точность подсчета размеров объектов зависит от механизма отслеживания размеров отношений;
- при малой нагрузке на сервер статистика может отражать заметную долю нагрузки от самого механизма сбора данных;
- в случае переполнения параметра
pg_stat_statements.maxвозможно вытеснение статистики, если выборки выполняются недостаточно часто.
Установка
Установка расширений может быть выполнена автоматически либо вручную.
Расширению pg_profile требуются:
plpgsql;dblink.
При наличии pg_stat_kcache и pg_stat_statements данные из их представлений также используются в отчетах pg_profile.
Расширение pg_stat_kcache требует наличия pg_stat_statements. Также pg_stat_statements должен быть указан в параметре shared_preload_libraries раньше, чем pg_stat_kcache.
Автоматизированная установка
Установка расширений и их первоначальная настройка может быть произведена автоматизированным путем на этапе установки СУБД.
При установке расширений pg_profile (pg_profile.is_enable) и pg_stat_kcache (pg_stat_kcache_is_enable) – связанные компоненты (зависимости) будут также установлены.
Установка вручную
Описание установки расширений вручную приведено в соответствующих разделах документа «Описание расширений продукта СУБД Pangolin».
Настройка
Конфигурационные параметры
Задать параметры настроек можно в конфигурационном файле (postgresql.conf/postgres.yml), либо в кастомных конфигурационных параметрах при автоматизированной установке СУБД.
Параметр | Описание | Значение по умолчанию |
|---|---|---|
| Мониторинг текущих команд для каждого процесса в |
|
| Мониторинг текущих команд для каждого процесса в |
|
| Мониторинг времени чтения/записи блоков в |
|
| Подсчет вызовов функций и времени их выполнения. Значение |
|
| Число байт, которое будет зарезервировано для отслеживания выполняемой в данный момент команды в каждой активной сессии в |
|
Параметры расширений
Конфигурационные параметры для настройки расширений представлены в одноименных разделах документа «Описание расширений продукта СУБД Pangolin»:
-
Параметры
pg_stat_statementsтакже влияют на расширениеpg_stat_kcache. -
pg_stat_kcache данного расширения.
Параметры подсчета точных размеров отношений
В СУБД Pangolin реализована функциональность подсчета точных размеров отношений в БД. Регулируется функциональность следующими параметрами:
Параметр | Описание | Значение по умолчанию |
|---|---|---|
|
| Включение механизма подсчета размеров объектов. |
|
| Максимальное количество отношений с физическими файлами на диске. В случае превышения заданного значения создание нового отношения невозможно. Значение следует задавать с запасом |
|
| Количество отношений, под которое кеш будет предварительно выделен при старте сервера. Кеш-таблица размещается в виде одного выровненного блока памяти, что ускоряет поиск |
Необходимо внимательно отнестись к параметру relnblocks_hash_max_size и взять достаточный запас, так как к этим отношениям относятся:
- таблица;
- индекс;
- генератор последовательности;
- таблица хранения сверхбольших атрибутов;
- материализованное представление.
Функции
Описание функций (входные/выходные параметры) для получения отчетности читайте в документе «Справочная информация», раздел «Функции отчетности по нагрузке Pangolin».
Управление
Сбор статистики с нескольких кластеров
Расширение pg_profile, установленное на один кластер, может собирать также статистику с других кластеров, именуемых servers (далее — сервера).
Для этого:
- при помощи функции
create_server()создайте необходимые сервера, указав имя и строку подключения. Подробнее о функции читайте в документе «Справочная информация», раздел «Функции отчетности по нагрузке Pangolin»; - убедитесь, что подключение может быть установлено ко всем БД всех серверов.
Таким образом возможен сбор статистики, например, с пассивного узла (Standby) при подключении с активного узла (Active).
Организация периодического сбора статистики
Периодичность сбора статистики задается параметром pg_profile.stats_periods, представляющим строку в формате crontab. По умолчанию сбор выполняется два раза в час — в 0 и 30 минут.
Также возможно:
- ручное выполнение
take_sample(); - организация внешнего планировщика
cron; - использование расширения
pg_cron.
Отчеты
Отчеты генерируются в формате HTML с помощью функций формирования отчетов. В pg_profile доступны два типа отчетов:
- Обычные отчеты содержат статистическую информацию о нагрузке экземпляра за указанный интервал;
- Дифференциальные отчеты содержат данные за два интервала, в которых статистика по одинаковым объектам отображается рядом, что упрощает сравнение нагрузки.
Разделы отчета по нагрузке СУБД Pangolin, реализованные в расширении pg_profile, описаны в разделе «Описание структуры отчета по нагрузке Pangolin» документа «Справочная информация».
Отключение функциональности
Отключение функциональности происходит путем отключения/удаления установленных ранее расширений. Описание процесса удаления расширений приведено в соответствующих разделах документа «Описание расширений продукта СУБД Pangolin».
Отключение подсчета точного размера отношений
Установите relnblocks_enable в off.
Отключение сбора статистика pg_profile
-
Определите
jobidзадачи дляpg_profileс помощью запроса:SELECT * from cron.job; -
Отключите задачу запросом:
SELECT cron.unschedule(jobid);
Отключение сбора статистики не требует перезагрузки.
Сценарии использования
Сценарии управления расширением представлены в документе «Описание расширений продукта СУБД Pangolin», раздела «pg_profile».