Wie kann ich vollständig blockierende Postgres-Abfragen anzeigen?


9

Ich verwende eine Anweisung von dieser Seite , um blockierende Abfragen in Postgres anzuzeigen

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;

Die Abfragen werden jedoch abgeschnitten, sodass ich normalerweise nicht sehen kann, was in der WHEREKlausel enthalten ist, was das Debuggen dieser Blockierungsprobleme sehr schwierig macht. Gibt es eine Einstellung, in der ich postgres anweisen kann, die vollständigen Abfragen zu protokollieren?pg_stat_activity

Antworten:


11

Die Länge der verfolgten Abfrage finden Sie im Parameter track_activity_query_size.

18.8.1. Abfrage- und Indexstatistiksammler

track_activity_query_size (integer)

Gibt die Anzahl der Bytes an, die reserviert sind, um den aktuell ausgeführten Befehl für jede aktive Sitzung für das pg_stat_activity.current_queryFeld zu verfolgen . Der Standardwert ist 1024 . Dieser Parameter kann nur beim Serverstart eingestellt werden.

Wenn Sie beispielsweise track_activity_query_size=16384in Ihrer Konfiguration waren, würde dies bedeuten, dass Abfragetext bis zu 16 KB gesammelt wird.


1
Nur um sicherzugehen, dass es klar ist (wie im Zitat angegeben, was möglicherweise übersehen wird). Um diese Konfigurationsoption zu ändern, muss der Server neu gestartet werden, damit sie wirksam wird.
Joishi Bodio
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.