¿Cómo ver las consultas de postgres de bloqueo completo?

9

Estoy usando una declaración de esta página para ver consultas de bloqueo en 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;

Sin embargo, las consultas se truncan, por lo que normalmente no puedo ver qué hay en la WHEREcláusula, lo que hace que la depuración de estos problemas de bloqueo sea muy difícil. ¿Hay una configuración donde puedo decirle a Postgres que registre las consultas completas enpg_stat_activity

Tony
fuente

Respuestas:

11

La longitud de la consulta rastreada se puede encontrar en el parámetro track_activity_query_size.

18.8.1. Recopilador de estadísticas de consulta e índice

track_activity_query_size (integer)

Especifica el número de bytes reservados para rastrear el comando actualmente en ejecución para cada sesión activa, para el pg_stat_activity.current_querycampo. El valor predeterminado es 1024 . Este parámetro solo se puede establecer al inicio del servidor.

por ejemplo, si tenía track_activity_query_size=16384en su configuración, esto significaría que se recopilaría texto de consulta de hasta 16k.


fuente
1
Solo para asegurarse de que esté claro (como se indica en la cita, que podría pasar desapercibido) ... cambiar esa opción de configuración requerirá un reinicio del servidor para que surta efecto.
Joishi Bodio