F.55. pg_wait_sampling#

F.55. pg_wait_sampling

F.55. pg_wait_sampling

F.55.1. About pg_wait_sampling

pg_wait_sampling - статистика ожидания на основе выборки

Версия: 1.1.4

GitHub

LICENSE

F.55.2. Введение

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

Модуль должен быть загружен путем добавления pg_wait_sampling в shared_preload_libraries в файле postgresql.conf, так как он требует дополнительную общую память и запускает фоновый рабочий процесс. Это означает, что для добавления или удаления модуля необходимо перезапустить сервер.

Когда pg_wait_sampling включен, он собирает два вида статистики.

  • История ожидания событий. Она реализована в виде кольцевого буфера в памяти, в котором записываются образцы ожидания событий каждого процесса с заданным (настраиваемым) периодом. Поэтому для каждого работающего процесса пользователь может видеть некоторое количество последних образцов в зависимости от размера истории (настраиваемого). Предполагая, что есть клиент, который периодически считывает эту историю и сохраняет ее где-то, пользователь может иметь непрерывную историю.

  • Профиль ожидания. Он реализован в виде хеш-таблицы в памяти, где накапливается количество выборок для каждого процесса и каждого события ожидания (и каждого запроса с pg_stat_statements). Эту хеш-таблицу можно сбросить по запросу пользователя. Предположим, что есть клиент, который периодически выгружает профиль и сбрасывает его, пользователь может получить статистику интенсивности событий ожидания во времени.

В сочетании с pg_stat_statements это расширение также может предоставлять статистику для каждого запроса.

pg_wait_sampling запускает специального фонового рабочего процесса для сбора статистики выше.

F.55.3. Установка

Типичная установка:

CREATE EXTENSION pg_wait_sampling;

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

pg_wait_sampling взаимодействует с пользователем с помощью набора представлений и функций.

pg_wait_sampling_current представление - информация о текущих событиях ожидания для всех процессов, включая фоновые рабочие процессы.

Column name Column type Description
pid int4 Id of process
event_type text Name of wait event type
event text Name of wait event
queryid int8 Id of query

pg_wait_sampling_get_current(pid int4) возвращает ту же таблицу для указанного одиночного процесса.

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

Column name Column type Description
pid int4 Id of process
ts timestamptz Пример временной метки
event_type text Name of wait event type
event text Name of wait event
queryid int8 Id of query

pg_wait_sampling_profile представление - профиль ожидания событий, полученных путем выборочного отбора во внутреннюю хеш-таблицу в памяти.

Column name Column type Description
pid int4 Id of process
event_type text Name of wait event type
event text Name of wait event
queryid int8 Id of query
count text Количество выборок

Функция pg_wait_sampling_reset_profile() сбрасывает профиль.

Работа сборщика статистики ожидания событий контролируется следующими GUC-параметрами.

Имя параметра Тип данных Описание Значение по умолчанию
pg_wait_sampling.history_size int4 Размер истории во внутреннем кольцевом буфере 5000
pg_wait_sampling.history_period int4 Период выборки истории в миллисекундах 10
pg_wait_sampling.profile_period int4 Период выборки профиля в миллисекундах 10
pg_wait_sampling.profile_pid bool Определяет, должен ли профиль быть для каждого pid true
pg_wait_sampling.profile_queries bool Определяет, должен ли профиль быть для каждого запроса true

Если pg_wait_sampling.profile_pid установлено в false, профилирование выборки не будет собираться для каждого процесса. В этом случае значение pid всегда будет равно нулю, и соответствующая строка будет содержать выборки для всех процессов.

Пока pg_wait_sampling.profile_queries установлено в значение false, поле queryid в представлениях будет равно нулю.

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

F.55.5. Авторы

  • Александр Коротков , Postgres Professional, Москва, Россия.

  • Ildus Kurbangaliev , Postgres Professional, Москва, Россия.