Из-за чего Postgre через pg_stat_activity не показывает запросы?

Ссылка скопирована
1 ответ

Сейчас ситуация такая: есть 1С, которая работает на ПосTelegramрес. Планирую посмотреть, какие запросы отправляет 1С. Запускаю pg_stat_activity, но почему-то не вижу этих запросов. Вот от pgAdmin 4 вижу. А от 1С - не вижу. Все работает на одном сервере - и БД, и 1С.

Смотрю так:

SELECT * FROM pg_stat_activity

Из-за чего так и как поправить?

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Редакция DevOps Ответ

pg_stat_activity показывает только текущую активность PostgreSQL, а не историю всех выполненных запросов. Если запрос был коротким и уже завершился, вы его там не увидите. Это особенно заметно для 1С: запросы могут выполняться быстро, соединения переиспользуются, а в момент просмотра таблица выглядит почти пустой.

Сначала проверьте, под каким пользователем и в какой базе смотрите:

SELECT pid, usename, datname, state, wait_event_type, wait_event, query
FROM pg_stat_activity
ORDER BY query_start DESC;

select pid, usename, datname, state, wait_event_type, wait_event, query from pg_stat_activity order by query_start desc;

Если вы подключены не к той базе или у пользователя нет прав видеть чужие запросы, результат будет неполным. Суперпользователь видит больше. Обычный пользователь может видеть только свои запросы или ограниченную информацию, в зависимости от версии и настроек.

Также проверьте состояние соединений. В pg_stat_activity часто много idle, а реальные запросы появляются на доли секунды. Для мониторинга коротких запросов лучше включить логирование или использовать pg_stat_statements.

CREATE extension IF NOT EXISTS pg_stat_statements;
SELECT query, calls, total_exec_time, mean_exec_time
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 20;

create extension if not exists pg_stat_statements; select query, calls, total_exec_time, mean_exec_time from pg_stat_statements order by total_exec_time desc limit 20;

Для 1С полезно включать медленные запросы:

log_min_duration_statement = 1000
log_line_prefix = '%m [%p] %u@%d '

log_min_duration_statement = 1000 log_line_prefix = '%m [%p] %u@%d '

Тогда всё, что дольше 1 секунды, попадёт в лог PostgreSQL. Это намного полезнее, чем пытаться поймать запрос вручную в pg_stat_activity.

Итог: pg_stat_activity не является журналом запросов. Он показывает снимок текущего состояния. Для анализа 1С используйте права суперпользователя, фильтр по нужной базе, лог медленных запросов и pg_stat_statements. Так вы увидите не только “что сейчас выполняется”, но и что реально нагружает базу.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно