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

Отчетность по нагрузке СУБД 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.

Автоматизированная установка

Установка расширений и их первоначальная настройка может быть произведена путем использования автоматизированных Ansible-скриптов.

При установке расширений pg_profile (pg_profile.is_enable) и pg_stat_kcache (pg_stat_kcache_is_enable) – связанные компоненты (зависимости) будут также установлены.

Установка вручную

Описание установки расширений вручную приведено в соответствующих разделах документа «Описание расширений продукта СУБД Pangolin».

Настройка

Конфигурационные параметры

Задать параметры настроек можно в конфигурационном файле (postgresql.conf/postgres.yml), либо в кастомных конфигурационных параметрах при автоматизированной установке СУБД.

Параметр

Описание

Значение по умолчанию

track_activities

Мониторинг текущих команд для каждого процесса в pg_stat_activity

on

track_counts

Мониторинг текущих команд для каждого процесса в pg_stat_all_tables

on

track_io_timing

Мониторинг времени чтения/записи блоков в pg_stat_statements, pg_stat_kcache

on

track_functions

Подсчет вызовов функций и времени их выполнения. Значение pl включает отслеживание только функций на процедурном языке, а all — также функций на языках SQL и C для представления pg_stat_user_functions

none

track_activity_query_size

Число байт, которое будет зарезервировано для отслеживания выполняемой в данный момент команды в каждой активной сессии в pg_stat_statements

1024

Параметры расширений

Конфигурационные параметры для настройки расширений представлены в одноименных разделах документа «Описание расширений продукта СУБД Pangolin»:

Параметры подсчета точных размеров отношений

В СУБД Pangolin реализована функциональность подсчета точных размеров отношений в БД. Регулируется функциональность следующими параметрами:

Параметр

Описание

Значение по умолчанию

relnblocks_enable

on

Включение механизма подсчета размеров объектов. pg_profile использует данные этого механизма вместо pg_class. Изменение параметра требует перезагрузки сервера

relnblocks_hash_max_size

1000000

Максимальное количество отношений с физическими файлами на диске. В случае превышения заданного значения создание нового отношения невозможно. Значение следует задавать с запасом

relnblocks_hash_init_size

1024

Количество отношений, под которое кеш будет предварительно выделен при старте сервера. Кеш-таблица размещается в виде одного выровненного блока памяти, что ускоряет поиск

Внимание!

Необходимо внимательно отнестись к параметру 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

  1. Определите jobid задачи для pg_profile с помощью запроса:

    SELECT * from cron.job;
  2. Отключите задачу запросом:

    SELECT cron.unschedule(jobid);

Отключение сбора статистики не требует перезагрузки.

Сценарии использования

Сценарии управления расширением представлены в документе «Описание расширений продукта СУБД Pangolin», раздела «pg_profile».