Как просмотреть полные блокирующие запросы postgres?

9

Я использую заявление с этой страницы для просмотра блокировки запросов в Postgres

SELECT bl.pid                 AS blocked_pid,
         a.usename              AS blocked_user,
         ka.query               AS blocking_statement,
         now() - ka.query_start AS blocking_duration,
         kl.pid                 AS blocking_pid,
         ka.usename             AS blocking_user,
         a.query                AS blocked_statement,
         now() - a.query_start  AS blocked_duration
  FROM  pg_catalog.pg_locks         bl
   JOIN pg_catalog.pg_stat_activity a  ON a.pid = bl.pid
   JOIN pg_catalog.pg_locks         kl ON kl.transactionid = bl.transactionid AND kl.pid != bl.pid
   JOIN pg_catalog.pg_stat_activity ka ON ka.pid = kl.pid
  WHERE NOT bl.granted;

Однако запросы усекаются, поэтому я обычно не вижу, что в WHEREпредложении, что делает отладку этих проблем блокировки очень сложной. Есть ли настройка, в которой я могу указать postgres регистрировать полные запросыpg_stat_activity

Тони
источник

Ответы:

11

Длина отслеживаемого запроса находится в параметре track_activity_query_size.

18.8.1. Сборщик статистики запросов и индексов

track_activity_query_size (integer)

Задает количество байтов, зарезервированных для отслеживания текущей выполняемой команды для каждого активного сеанса, для pg_stat_activity.current_queryполя. Значение по умолчанию 1024 . Этот параметр можно установить только при запуске сервера.

например, если у вас есть track_activity_query_size=16384в вашей конфигурации, то это будет означать, что будет собран текст запроса до 16 КБ.


источник
1
Просто чтобы убедиться, что все ясно (как указано в цитате, которая может быть пропущена) ... изменение этого параметра конфигурации потребует перезагрузки сервера, чтобы он вступил в силу.
Джоиши Бодио