Перейти к основному содержимому

pg_query_state. Мониторинг состояния запросов в реальном времени

Версия: 1.0

В исходном дистрибутиве установлено по умолчанию: нет.

Связанные компоненты: отсутствуют.

Схема размещения: ext.

Расширение pg_query_state предоставляет механизм наблюдения за текущим состоянием выполняющихся SQL-запросов в реальном времени.

В отличие от команды EXPLAIN ANALYZE, которая показывает план и статистику только после завершения запроса, pg_query_state предоставляет вариант просмотра активного состояния плана, включая вложенные вызовы и параллельные процессы.

Описание функциональности

pg_query_state возвращает одну или несколько строк, отражающих текущее состояние выполнения запроса в процессе СУБД.

pg_query_state возвращает результат в виде таблицы:

Поле

Тип

Описание

pid

int4

Идентификатор backend-процесса

frame_number

int4

Уровень вложенности (0 – основной запрос, >0 – вложенные операции, например вызовы внутри функций)

query_text

text

Текст текущего SQL-запроса (маскируется согласно masking_mode)

plan

text

Текущее состояние плана выполнения

leader_pid

int4

Идентификатор ведущего процесса для параллельного запроса, NULL – процесс ведущий

Построение данных отражает дерево выполнения запроса:

  • основной процесс (leader_pid = NULL);
  • его рабочие процессы, связанные по leader_pid;
  • вложенные запросы, вызванные функциями.

Аргументы функции (все необязательные):

pg_query_state(
verbose boolean DEFAULT false,
costs boolean DEFAULT false,
timing boolean DEFAULT false,
buffers boolean DEFAULT false,
triggers boolean DEFAULT false,
format text DEFAULT 'text'
)
  • verbose – вывод расширенных деталей плана;
  • costs – отображение стоимостей;
  • timing – отображение времени выполнения узлов;
  • buffers – статистика использования буферов;
  • triggers – статистика по триггерам;
  • format – формат вывода (text, xml, json, yaml).

Ограничения

  1. Если процесс не исполняет запрос (state = idle), отображаются данные из pg_stat_activity.
  2. Запуск функции разрешен только суперпользователям или владельцам backend-процесса.
  3. При отсутствии доступа возвращается сообщение permission denied.

Установка

Установка расширения может быть произведена в процессе развертывания СУБД СУБД Pangolin при использовании настроек по умолчанию (смотрите документ «Руководство по установке», раздел «Автоматизированная установка при помощи Ansible-скриптов»). При необходимости расширение можно включить вручную.

Для установки pg_query_state вручную, выполните следующие действия.

  1. Добавьте имя библиотеки в параметр shared_preload_libraries в конфигурационном файле postgresql.conf кластера:

    shared_preload_libraries = 'pg_query_state'

    Если параметр уже содержит другие библиотеки, добавьте pg_query_state через запятую, например:

    shared_preload_libraries = 'pg_stat_statements, pg_query_state'
  2. Перезапустите сервер баз данных, чтобы изменения вступили в силу.

  3. Создайте расширение pg_query_state в каждой базе данных, где планируется его использовать. Рекомендуем размещать объекты в схеме ext:

    CREATE EXTENSION IF NOT EXISTS pg_query_state
    WITH SCHEMA ext;
  4. Для обновления версии расширения выполните:

    ALTER EXTENSION pg_query_state UPDATE;

Настройка

Не требуется.

Ссылки на документацию разработчика

Дополнительно поставляемый модуль pg_query_state: https://github.com/postgrespro/pg_query_state?tab=readme-ov-file.