Como visualizar as consultas de bloqueio completo do postgres?

9

Estou usando uma instrução desta página para visualizar consultas de bloqueio no 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;

No entanto, as consultas são truncadas, então normalmente não consigo ver o que está na WHEREcláusula, o que dificulta muito a depuração desses problemas de bloqueio. Existe uma configuração na qual eu posso dizer ao postgres para registrar as consultas completas nopg_stat_activity

Tony
fonte

Respostas:

11

O comprimento da consulta monitorados podem ser encontrados no parâmetro track_activity_query_size.

18.8.1 Coletor de estatísticas de consulta e índice

track_activity_query_size (integer)

Especifica o número de bytes reservados para rastrear o comando atualmente em execução para cada sessão ativa, para o pg_stat_activity.current_querycampo. O valor padrão é 1024 . Este parâmetro pode ser definido apenas no início do servidor.

por exemplo, se você tivesse track_activity_query_size=16384na sua configuração, isso significaria que o texto da consulta até 16k seria coletado.


fonte
11
Apenas para ter certeza de que está claro (como indicado na citação, o que pode passar despercebido) .. alterar essa opção de configuração exigirá uma reinicialização do servidor para que ela entre em vigor.
Joishi Bodio 27/01