F.49. pg_sample_profile — профилирование активности базы данных на основе выборки#

F.49. pg_sample_profile — профилирование активности базы данных на основе выборки

F.49. pg_sample_profile — профилирование активности базы данных на основе выборки #

Версия: 1.0

F.49.1. Обзор #

Tantor SE-1C сообщает о текущем событии ожидания для каждого серверного процесса. Однако для получения описательного статистического профиля поведения сервера требуется повторная выборка событий ожидания. pg_sample_profile предоставляет функции для внешней выборки активности базы данных из клиентских серверных процессов.

Предостережение

Расширение сэмплирует только бэкенд-процессы, которые инициируют возможность соединения с базой данных. Сторонние фоновые процессы, выполняющие внешние по отношению к базе задачи, например, сборку логов (log collector), игнорируются.

F.49.2. Использование #

F.49.2.1. Установка #

CREATE EXTENSION pg_sample_profile;

Для работы предзагружать расширение на старте постмастера через прописывание в shared_preload_libraries не нужно

F.49.2.2. Функции #

pg_sample_session( pid int4, duration interval DEFAULT '10 seconds', sample_period interval DEFAULT '10 milliseconds', with_pids boolean DEFAULT false ) #

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

pg_sample_procs( pids int4[], duration interval DEFAULT '10 seconds', sample_period interval DEFAULT '10 milliseconds', with_pids boolean DEFAULT false ) #

Собирает статистику по всем "живым" процессам, указанным в массиве pids, в течение указанного времени duration и с указанной периодичностью sample_period.

Если массив pids имеет значение NULL — сбор статистики происходит по всем процессам СУБД.

pg_sample_all( duration interval DEFAULT '10 seconds', sample_period interval DEFAULT '10 milliseconds', with_pids boolean DEFAULT false ) #

Собирает статистику по всем процессам СУБД в течение указанного времени duration и с указанной периодичностью sample_period.

Эта функция эквивалентна вызову pg_sample_procs(NULL, ...).

Все три функции выводят таблицу в следующем формате:

Имя столбца Тип Описание Особенности
pid int4 Идентификатор процесса NULL, если входной аргумент with_pids равен false
backend_type text Тип бэкенд-процесса Значения идентичны одноименному столбцу в pg_stat_activity представлении
database_id int4 Идентификатор базы данных
user_id int4 Идентификатор пользователя
state text Состояние бэкенд-процесса Значения идентичны одноименному столбцу pg_stat_activity представлении
query_id int8 Идентификатор запроса NULL означает, что бэкенд либо не находится в состоянии выполнения запроса, либо выполняет вызов функции через fast path интерфейс, или же вычисление query_id отключено на стороне сэмплируемого процесса
plan_id int8 Идентификатор плана запроса Всегда отключен и равен NULL
event_type text Имя типа события ожидания CPU time означает состояние "вне ожидания", либо непокрытое Tantor SE-1C (неизвестное) ожидание
event text Имя события ожидания
count int8 Колличество сэмплов

Примечание

Есть два способа включения query_id:

  • явно проставить compute_query_id в значение on (на конкретных бэкенд-процессах или же полностью на всем postgres кластере командой ALTER SYSTEM SET)

  • установите compute_query_id в значение auto (значение по умолчанию) или regress и добавьте расширение pg_sample_profile в параметры shared_preload_libraries или session_preload_libraries

Предостережение

NULL для query id имеет два значения: бэкенд либо находится в состоянии вне выполнения запроса, либо вычисление query id отключено на стороне сэмплируемого бэкенда(-ов). Поскольку вычисление query id может быть явно отключено на уровне сессии в любой момент, то может произойти путаница — статистика, собранная по бэкендам вне состояния выполнения запроса, будет слита со статистикой при отключенном query id, в том числе по всем выполненным запросам.