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, durationintervalDEFAULT'10 seconds', sample_periodintervalDEFAULT'10 milliseconds', with_pidsbooleanDEFAULTfalse) Собирает статистику по процессам клиентской сессии, включая основной процесс и порожденные от него параллельные воркеры, в течение указанного времени
durationи с указанной периодичностьюsample_period.-
pg_sample_procs( pids#int4[], durationintervalDEFAULT'10 seconds', sample_periodintervalDEFAULT'10 milliseconds', with_pidsbooleanDEFAULTfalse) Собирает статистику по всем "живым" процессам, указанным в массиве
pids, в течение указанного времениdurationи с указанной периодичностьюsample_period.Если массив
pidsимеет значениеNULL— сбор статистики происходит по всем процессам СУБД.-
pg_sample_all( duration#intervalDEFAULT'10 seconds', sample_periodintervalDEFAULT'10 milliseconds', with_pidsbooleanDEFAULTfalse) Собирает статистику по всем процессам СУБД в течение указанного времени
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, в том числе по всем выполненным запросам.