F.44. pg_wait_sampling

pg_wait_sampling — это расширение Postgres Pro для периодического сбора статистики по событиям ожидания.

Начиная с версии 9.6, Postgres Pro Standard выдаёт информацию о текущих событиях ожидания для определённых процессов. Однако чтобы получить полезную общую статистику активности сервера, необходимо снимать показания по событиям ожидания неоднократно. Расширение pg_wait_sampling автоматизирует снятие показаний по событиям ожидания, запуская специальный рабочий процесс. Когда расширение pg_wait_sampling включено, вы можете получать следующую периодически собираемую информацию:

  • История ожиданий — список событий ожидания для недавних процессов, с отметками времени.

  • Профиль ожиданий — количество наблюдавшихся событий ожидания для всех процессов, в разрезе типов событий.

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

Используя pg_wait_sampling, вы можете выявить проблемы зависимостей запросов, выполняющихся дольше чем ожидается. Вы можете видеть процессы в состоянии ожидания в каждый момент времени и проанализировать статистику событий ожидания. Список возможных событий ожидания приведён в Таблице 27.4.

См. также

Просмотр статистики по событиям ожидания

Справка

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

Расширение pg_wait_sampling входит в состав Postgres Pro Standard и не имеет особых требований.

Чтобы включить pg_wait_sampling, выполните следующее:

  1. Добавьте pg_wait_sampling в переменную shared_preload_libraries в файле postgresql.conf:

    shared_preload_libraries = 'pg_wait_sampling'
  2. Создайте расширение pg_wait_sampling, выполнив следующий запрос:

    CREATE EXTENSION pg_wait_sampling;
  3. Перезапустите сервер. Так как расширению pg_wait_sampling требуется дополнительная разделяемая память и фоновый рабочий процесс, вы должны перезапустить сервер после добавления или удаления pg_wait_sampling.

После создания расширения pg_wait_sampling начинает собирать статистику по событиям ожидания для каждого процесса. Вы можете по своему усмотрению изменить частоту снятия показаний и настроить режимы сбора статистики, используя переменные GUC.

Если вы хотите остановить сбор статистики, удалите расширение pg_wait_sampling, уберите pg_wait_sampling из переменной shared_preload_libraries и перезагрузите сервер.

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

F.44.2.1. Просмотр статистики по событиям ожидания

Когда pg_wait_sampling работает, показания снимаются по умолчанию каждые 10 мс. Обратиться к собранной статистике вы можете через набор функций и представлений. Если вы замечаете, что некоторые запросы «зависли» или выполняются дольше, чем ожидается, вы можете увидеть все текущие события ожидания в представлении 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;

Это представление выдаёт показания по событиям ожидания с отметками времени. История ожиданий реализована как кольцевой буфер в памяти, размер которого по умолчанию ограничен 5000 показаниями. Чтобы сохранить историю за больший период времени, вы можете изменить переменную pg_wait_sampling.history_size либо подключить клиентское приложение, которое будет периодически считывать историю ожиданий и сохранять её в локальном хранилище.

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

SELECT * FROM pg_wait_sampling_profile;

Профиль ожиданий сохраняется как хеш-таблица в памяти, накапливающая показатели по отдельным процессам и по событиям ожидания. Вы можете сбросить профиль ожиданий, вызвав функцию pg_wait_sampling_reset_profile(). Если вы подключите к вашей базе данных клиента, который будет периодически сбрасывать данные событий ожидания и очищать профиль, вы можете сохранять и анализировать концентрацию событий ожидания во времени.

Важно

Так как статистика по событиям ожидания находится в ОЗУ, важно очищать профиль ожиданий время от времени во избежание переполнения памяти.

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

F.44.3. Справка

F.44.3.1. Переменные GUC

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

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)

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

По умолчанию: true

pg_wait_sampling.profile_queries (bool)

Режим обработки показаний для профиля ожиданий. Если установлено значение false, собирается общий профиль ожиданий для всех запросов. В этом случае значение queryid для каждого запроса устанавливается равным нулю, а соответствующая строка содержит показания по событиям ожидания для всех запросов. Чтобы собирать профиль ожиданий для каждого запроса отдельно, загрузите расширение pg_stat_statements и установите для параметра pg_wait_sampling.profile_queries значение true.

По умолчанию: true

F.44.3.2. Представления pg_wait_sampling

F.44.3.2.1. Представление pg_wait_sampling_current

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

Таблица F.27. Представление pg_wait_sampling_current

Имя столбцаТип столбцаОписание
pidint4Идентификатор процесса
event_typetextИмя типа события ожидания
eventtextИмя события ожидания
queryidint8Идентификатор запроса

F.44.3.2.2. Представление pg_wait_sampling_history

Представление pg_wait_sampling_history содержит историю событий ожидания. Эти данные хранятся в кольцевом буфере в памяти.

Таблица F.28. Представление pg_wait_sampling_history

Имя столбцаТип столбцаОписание
pidint4Идентификатор процесса
tstimestamptzВремя снятия показания
event_typetextИмя типа события ожидания
eventtextИмя события ожидания
queryidint8Идентификатор запроса

F.44.3.2.3. Представление pg_wait_sampling_profile

Представление pg_wait_sampling_profile содержит профиль событий ожидания. Эти данные хранятся в виде хеш-таблицы в памяти.

Таблица F.29. Представление pg_wait_sampling_profile

Имя столбцаТип столбцаОписание
pidint4Идентификатор процесса
event_typetextИмя типа события ожидания
eventtextИмя события ожидания
queryidint8Идентификатор запроса
countint8Число наблюдений

F.44.3.3. Функции

pg_wait_sampling_get_current(pid int4)

Возвращает представление pg_wait_sampling_current со списком текущих событий ожидания. Если вы зададите аргумент pid, представление будет отфильтровано по процессу с заданным идентификатором.

Аргументы:

  • pid — Необязательный параметр. Идентификатор процесса, для которого будут выводиться текущие события ожидания.

pg_wait_sampling_reset_profile()

Сбрасывает профиль ожиданий и очищает память.

F.44.4. Автор

Александр Коротков

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy