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

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

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

Версия: 1.0

F.40.1. Обзор #

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

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

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

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

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

CREATE EXTENSION pg_sample_profile;

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

F.40.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 BE (неизвестное) ожидание
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, в том числе по всем выполненным запросам.