F.52. pg_wait_sampling#
F.52. pg_wait_sampling #
F.52.1. About pg_wait_sampling #
pg_wait_sampling
- статистика ожидания на основе выборки
Версия: 1.1.4
F.52.2. Введение #
Tantor SE-1C предоставляет
информацию о текущем ожидаемом событии конкретного процесса.
Однако, чтобы собрать описательную статистику поведения сервера,
пользователю необходимо несколько раз отобрать текущее ожидаемое событие.
pg_wait_sampling
- это расширение для сбора
статистики выборки ожидаемых событий.
Модуль должен быть загружен путем добавления pg_wait_sampling
в shared_preload_libraries
в файле postgresql.conf, так как он требует дополнительную общую память и запускает фоновый рабочий процесс. Это означает, что для добавления или удаления модуля необходимо перезапустить сервер.
Когда pg_wait_sampling
включен, он собирает два вида статистики.
История ожидания событий. Она реализована в виде кольцевого буфера в памяти, в котором записываются образцы ожидания событий каждого процесса с заданным (настраиваемым) периодом. Поэтому для каждого работающего процесса пользователь может видеть некоторое количество последних образцов в зависимости от размера истории (настраиваемого). Предполагая, что есть клиент, который периодически считывает эту историю и сохраняет ее где-то, пользователь может иметь непрерывную историю.
Профиль ожидания. Он реализован в виде хеш-таблицы в памяти, где накапливается количество выборок для каждого процесса и каждого события ожидания (и каждого запроса с
pg_stat_statements
). Эту хеш-таблицу можно сбросить по запросу пользователя. Предположим, что есть клиент, который периодически выгружает профиль и сбрасывает его, пользователь может получить статистику интенсивности событий ожидания во времени.
В сочетании с pg_stat_statements
это расширение также может предоставлять статистику для каждого запроса.
pg_wait_sampling
запускает специального фонового
рабочего процесса для сбора статистики выше.
F.52.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.52.5. Авторы #
Александр Коротков
<[email protected]>
, Postgres Professional, Москва, Россия.Ildus Kurbangaliev
<[email protected]>
, Postgres Professional, Москва, Россия.