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

Аналитика производительности (Performance Insights)

Описание

Сведения

Функциональность доступна только для редакций Enterprise и Enterprise для ERP-систем.

Описание

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

Дополнительно в статистику активности добавлено поле wait_event_start, содержащее время начала текущего события ожидания серверного процесса, зафиксированное в момент сбора данных. Поле используется для расчета оценочной длительности ожиданий и для дифференциации событий ожидания с одинаковыми типом и именем в разных срезах статистики.

Путь к папке, в которой сохраняются файлы с данными, может быть задан в настройках (значение по умолчанию ${PGDATA}/pg_perf_insights).

Для последующего анализа собранной статистики можно сформировать отчет с указанием временного диапазона. Отчет сохраняется в формате HTML. Описание и примеры разделов отчета представлены в разделе «Описание разделов отчета по аналитике производительности Pangolin» документа «Справочная информация».

Настройка

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

примечание

Для применения внесенных изменений настроечных параметров необходимо выполнить перезагрузку.

При изменении пути к папке хранения файлов необходимо перенести содержимое старой папки в новую.

Для включения сбора времени начала события ожидания используется параметр конфигурации monitor_wait_event_start. При значении on в статистику активности добавляется и заполняется поле wait_event_start, содержащее время начала текущего события ожидания серверного процесса, зафиксированное в момент сбора данных. При значении off поле wait_event_start присутствует в результатах функций и представлений, но для всех строк имеет значение NULL.

Параметр monitor_wait_event_start имеет контекст PGC_SIGHUP и требует перечитывания конфигурации (например, с помощью SELECT pg_reload_conf(); или отправки серверу сигнала SIGHUP).

Настройка параметров для аналитики производительности осуществляется в файле postgresql.conf для конфигурации standalone, в файле postgres.yml для конфигурации cluster:

Параметр

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

Описание

performance_insights.enable

false

Включает или выключает функциональность

performance_insights.sampling_enable

true

Включает или выключает сбор данных.

После изменения настроек параметра требуется выполнить одно из предложенных действий:

  • перезагрузка;
  • вызов команды SELECT pg_reload_conf();;
  • отправить сигнал SIGHUP

performance_insights.sampling_period

1s

Задает периодичность сбора данных в миллисекундах. Минимальное значение 100ms, значение max — не ограничено

performance_insights.num_samples_in_ram

900

Задает количество итераций сбора данных активности текущих сессий, хранящихся в оперативной памяти. Определяет время хранения данных активности текущих сессий в оперативной памяти. Время определяется количеством сборов данных (performance_insights.num_samples_in_ram), умноженным на периодичность сбора данных (performance_insights.sampling_period). Таким образом, время хранения данных активности текущих сессий по умолчанию: 900 * 1s = 900 секунд (или 15 минут), при этом:

  • min значение – 0;
  • max значение – не ограничено (2^31-1).
Внимание!

При значении параметра 0 данные, собираемые performance_insights.num_samples_in_ram (Activity и Lock), будут записываться сразу на диск, без промежуточного сохранения в общей памяти. Это подразумевает частичный отказ от использования shared memory для хранения snapshots.

performance_insights.num_samples_in_files

86400

Задает количество итераций сбора данных активности текущих сессий, хранящихся в файлах (на диске). Определяет время хранения данных активности текущих сессий в файлах (на диске). Время определяется количеством сборов данных (performance_insights.num_samples_in_files) умноженное на периодичность сбора данных (performance_insights.sampling_period). Таким образом, время хранения данных активности текущих сессий по умолчанию 86400 * 1s = 86400 секунд (или 1 сутки), при этом:

  • min значение - 1;
  • max значение — не ограничено (2^31-1).
Внимание!

В СУБД Pangolin этот параметр применяется только при использовании формата по умолчанию (performance_insights.file_format = 0).

performance_insights.directory

Задает путь к папке, в которую сохраняются файлы с полученными данными (значение по умолчанию ${PGDATA}/pg_perf_insights);

Внимание!

Рекомендуется задать директорию хранения, находящуюся за пределами директории с данными СУБД (PGDATA).

В противном случае возможна потеря статистики при повторной инициализации кластера, например, при восстановлении из резервной копии.

performance_insights.masking

off

Включает или выключает маскирование параметров запроса, параметров соединения и имени пользователя. Возможные значения параметра - on, off, partial. Параметр performance_insights.masking рекомендуется поместить под защиту.

Внимание!

Возникновение предупреждения формата Invalid PL/pgSQL expression passed to masker, masking limited to input string only означает, что исходный запрос превышал ограничение по длине (тег окончания блока запроса не найден), но был замаскирован.

monitor_wait_event_start

off

Включает сбор времени начала события ожидания. Требует SIGHUP, контекст PGC_SIGHUP.

performance_insights.store_state_idle

off

Активирует сохранение в отчетах данных по процессам находящимся в статусе STATE_IDLE (неактивен).

Внимание!

Включение и отключение performance_insights.store_state_idle и performance_insights.store_state_undefined приводит к появлению избыточной (более полной) информации о выбранных процессах, однако объем собираемой информации значительно возрастает (в 10 и более раз – зависит от нагрузки). Поэтому рекомендуется использование этих ключей только при наличии подозрений на взятие локов воркерами в статусах STATE_IDLE и STATE_UNDEFINED и последующем отключении соответствующих настроек.

performance_insights.store_state_undefined

off

Активирует сохранение в отчетах данных по процессам находящимся в статусе STATE_UNDEFINED (неопределен).

В СУБД Pangolin были добавлены следующие параметры конфигурации для оптимизации структуры хранения данных Performance Insights:

Параметр

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

Описание

performance_insights.shmem_limit

0

Задает ожидаемый объем общей памяти, заменяя собой ограничение по количеству сохраняемых выборок (performance_insights.num_samples_in_ram) путем автоматического пересчета.

По умолчанию этот параметр равен 0, что означает использование стандартных настроек, указанных в performance_insights. num_samples_in_ram. Но если задать ненулевое значение для performance_insights.shmem_limit, оно приобретает приоритет перед настройками performance_insights.num_samples_in_ram, приводя к автоматическому пересчету последних, с отображением предупреждения (warning).

Внимание!

Если указан параметр performance_insights.num_samples_in_ram = 0, общая память игнорируется вне зависимости от значения performance_insights.shmem_limit, переключаясь на работу без ее использования.

При ненулевом значении performance_insights.shmem_limit, если выделенного объема памяти недостаточно даже для сохранения одной выборки, появится предупреждение с рекомендацией увеличить лимит памяти. До тех пор, пока необходимая память не предоставлена, система записывает данные прямо на диск, имитируя поведение при performance_insights.num_samples_in_ram = 0.

performance_insights.file_format

0

Задает формат файла, используемый для хранения данных:

  • 0 - формат по умолчанию (1 минута в файле, старый формат, формат Default);
  • 1 - gzip (сжатие, хранение диапазоном секунд);
  • 2 - zstd (сжатие, хранение диапазоном секунд);
  • 3 - формат с диапазоном секунд (без сжатия)

performance_insights.packed_block_size

25MB

Задает размер распакованного блока данных, хранимых в одном файле. Допустимые значения – 5MB - 256MB

performance_insights.size_samples_in_files

0

Задает максимальный размер папки с данными. 0 - значение по умолчанию (означает, размер без ограничений). Диапазон 0 - (2^31-1)MB (только для форматов 1-3). При значении 0 файлы форматов (performance_insights.file_format) 1, 2, 3 не будут удаляться автоматически, ограничений на общий размер нет

performance_insights.compression_level

9

Задает уровень сжатия для алгоритмов хранения со сжатием. 9 - максимальное значение, 0 - минимальное (не рекомендуется). Для форматов 0, 3 игнорируется. Чем больше значение сжатия — тем сильнее нагрузка на CPU

Функции

Для работы с данными по аналитике производительности СУБД Pangolin применяются следующие функции:

  • pg_stat_get_activity_history — возвращает набор записей с данными об активности сессий в определенный момент времени;
  • pg_stat_get_activity_and_lock_status_history — возвращает данные активности текущих сессий вместе с данными блокировок (если они имеются) и затраченными ресурсами (CPU, IO);
  • pg_stat_get_activity_history_last — возвращает набор записей с данными об активности сессий в последний период обновления истории;
  • pg_lock_status_history — возвращает набор записей с информацией о блокировках в определенный момент времени;
  • pg_stat_activity_history_reset — функция для управления сохраненными данными, которая полностью очищает историю;
  • pg_stat_activity_and_lock_status_history_report — формирует отчет из собранных данных.
примечание

По умолчанию функции по аналитике производительности может вызвать суперпользователь или пользователь, у которого есть привилегии групповой роли pg_read_all_perfinsight.

Описание функций (входные параметры / возвращаемые значения) и примеры использования представлены в отдельном документе «Справочная информация» раздел «Функции для аналитики производительности Pangolin».

Сбор данных

Для сбора данных в СУБД Pangolin создается дочерний процесс, в цикле которого происходит периодический опрос статистики активности и блокировок.

В дочернем процессе с заданной периодичностью собирается информация, связанная с текущей активностью серверных процессов:

  • информация об активности текущих серверных процессов (набор полей, аналогичный набору полей представления pg_stat_activity, дополнен полем с идентификатором запроса query_id, полем со временем сбора информации sample_time и полем wait_event_start);
  • информация о блокировках, удерживаемых активными серверными процессами (набор полей, аналогичный набору полей представления pg_locks, дополнен полем со временем сбора информации sample_time).

Сбор и заполнение поля wait_event_start выполняются только при включенном параметре monitor_wait_event_start; при его значении off поле присутствует в срезах, но всегда имеет значение NULL.

Отображение времени начала ожидания

При включенном параметре monitor_wait_event_start в статистике активности фиксируется время начала текущего события ожидания (wait_event_start), зафиксированное в момент сбора данных. Поле доступно в расширенном представлении pg_stat_activity_ext и в функциях аналитики производительности.

В HTML-отчетах Performance Insights на основе значения wait_event_start формируются агрегированные показатели длительности ожиданий Durations (min, max, med) secs, которые носят оценочный характер.

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

Включение сбора времени начала ожиданий с помощью параметра monitor_wait_event_start:

Включение wait_event_start

Получение значения wait_event_start через системную функцию:

wait_event_start через системную функцию

Получение значения wait_event_start через представление pg_stat_activity_ext:

wait_event_start через представление

Использование поля wait_event_start в Performance Insights и HTML-отчете:

wait_event_start через Performance Insights

Сохранение данных в памяти

Полученные записи сохраняются в shared memory.

В сохраняемых в памяти срезах активности фиксируется поле wait_event_start. При включенном параметре monitor_wait_event_start поле заполняется значением времени начала текущего события ожидания, зафиксированным в момент сбора данных, при его наличии. При выключенном параметре поле присутствует в срезах, но имеет значение NULL.

Записи, у которых временная метка превышает интервал времени относительно текущего момента, сохраняются на диск в файл и удаляются из памяти.

примечание

Интервал времени в данном случае определяется периодом сбора данных умноженным на интервал хранения в памяти (performance_insights.sampling_period * performance_insights.num_samples_in_ram).

Файлы с полученными данными сохраняются в папку, путь к которой задается параметром конфигурации performance_insights.directory.

Сохранение данных на диск

Файлы с записями, у которых временная метка превышает интервал времени относительно текущего момента, удаляются с диска.

примечание

Интервал времени в данном случае определяется произведением суммы интервалов хранения в памяти и на диске на период сбора ((performance_insights.num_samples_in_ram + performance_insights.num_samples_in_files) * performance_insights.sampling_period).

При получении сигнала остановки процесса (SIGQUIT или SIGTERM) записи из оперативной памяти сохраняются в файл.

Управление

Отключение функциональности

Функциональность отключается значением параметра конфигурации performance_insights.enable = off.

Доработки

К ключевым доработкам Performance Insights относятся: