pg_wait_sampling. Расследование проблем производительности
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: отсутствуют.
Схема размещения: не используется.
СУБД Pangolin предоставляет информацию о текущем событии ожидания конкретного процесса. Однако, чтобы собрать описательную статистику поведения сервера, пользователь должен выполнить выборку текущего события ожидания несколько раз. pg_wait_sampling - это расширение для сбора статистики выборки событий ожидания.
При использовании с pg_stat_statements рекомендуется указывать pg_stat_statements перед pg_wait_sampling в shared_preload_libraries, чтобы идентификаторы служебных запросов не переписывались первыми.
Когда расширение активно pg_wait_sampling, оно собирает два вида статистики:
- Историю событий ожидания. Это реализовано в виде кольцевого буфера в памяти, в который записываются выборки событий ожидания каждого процесса с заданным (настраиваемым) периодом. Таким образом, для каждого запущенного процесса пользователь может видеть некоторое количество последних выборок в зависимости от размера истории (настраиваемого). Предполагается, что есть клиент, который периодически читает эту историю и куда-то ее сбрасывает, пользователь может иметь непрерывную историю.
- Профиль ожидания. Реализован в виде хеш-таблицы в памяти, где количество выборок накапливается для каждого процесса и каждого события ожидания (и каждого запроса с
pg_stat_statements). Эта хеш-таблица может быть сброшена по запросу пользователя. Предполагается, что есть клиент, который периодически удаляет профиль и сбрасывает его, пользователь может получать статистику интенсивности событий ожидания в зависимости от времени.
В сочетании с pg_stat_statements это расширение также может предоставлять статистику по каждому запросу.
pg_wait_sampling запускает специальный фоновый обработчик для сбора приведенной выше статистики.
Объекты
Представления
pg_wait_sampling_current – выдает информацию о текущих событиях ожидания для всех процессов, включая фоновые рабочие процессы.
| Название поля | Тип данных | Описание |
|---|---|---|
pid | int4 | Идентификатор процесса |
event_type | text | Название типа ожидаемого события |
event | text | Название ожидаемого события |
queryid | int8 | Идентификатор запроса |
pg_wait_sampling_history — представление, содержащее историю событий ожидания, полученную путем выборки в кольцевой буфер в памяти.
| Название поля | Тип данных | Описание |
|---|---|---|
pid | int4 | Идентификатор процесса |
ts | timestamptz | Временная метка выборки |
event_type | text | Название типа события ожидания |
event | text | Название события ожидания |
queryid | int8 | Идентификатор запроса |
pg_wait_sampling_profile — представление, содержащее профиль событий ожидания, полученный путем выборки в хеш-таблицу в памяти.
| Название поля | Тип данных | Описание |
|---|---|---|
pid | int4 | Идентификатор процесса |
event_type | text | Название типа события ожидания |
event | text | Название события ожидания |
queryid | int8 | Идентификатор запроса |
count | text | Количество выборок |
Функции
Функция pg_wait_sampling_get_current(pid int4) возвращает таблицу с данными из предоставления pg_wait_sampling_current для конкретного процесса.
Функция pg_wait_sampling_reset_profile() сбрасывает профиль.
Конфигурационные параметры
Параметр | Тип данных | Значение по умолчанию | Описание |
|---|---|---|---|
|
|
| Размер истории в кольцевом буфере в памяти |
|
|
| Период выборки для истории в миллисекундах |
|
|
| Период выборки для профиля в миллисекундах |
|
|
| Флаг, указывающий, должен ли профиль быть на основе PID. Если установлен в |
|
|
| Флаг, указывающий, должен ли профиль быть на основе запроса. Если установлен в |
|
|
| Флаг, указывающий, должны ли обрабатываться бэкенды на CPU. Если установлен в |
Значения данных GUC-параметров можно изменять только через файл конфигурации или с помощью команды ALTER SYSTEM. После изменения необходимо перечитать конфигурацию сервера (например, с помощью функции pg_reload_conf), чтобы изменения вступили в силу.
Доработка
Доработка не проводилась.
Ограничения
Ограничения отсутствуют.
Установка
Для начала использования расширения выполните следующие действия:
-
Пропишите в конфигурационном файле (
postgresql.conf/postgres.yml) СУБД Pangolin название расширения в настроечный параметрshared_preload_libraries:shared_preload_libraries = 'pg_wait_sampling' -
Далее расширение нужно установить в целевую БД командой:
CREATE EXTENSION pg_wait_sampling; -
Выполните перезапуск сервера:
systemctl restart postgresql
Настройка
Для настройки расширения выполните настройку параметров конфигурации.
Использование модуля
- Увидеть все текущие ожидания в представлении
pg_wait_sampling_current:
SELECT * FROM pg_wait_sampling_current;
- Отфильтровать представление по одному процессу можно функцией
pg_wait_sampling_get_current(), передав ей идентификатор интересующего процесса:
SELECT * FROM pg_wait_sampling_get_current(pid);
- Для анализа динамики недавних ожиданий, нужно обратиться к представлению
pg_wait_sampling_history, показывающему историю ожиданий для последних процессов:
SELECT * FROM pg_wait_sampling_history;
- Для отслеживания ожиданий в базе данных в течение длительного времени используется представление
pg_wait_sampling_profile:
SELECT * FROM pg_wait_sampling_profile;
- Так как статистика по ожиданиям находится в RAM, важно очищать профиль со статистикой время от времени во избежание переполнения памяти.
pg_wait_sampling_reset_profile();
Ссылки на документацию разработчика
Дополнительно поставляемый модуль pg_wait_sampling.