web-dev-qa-db-fra.com

Comment afficher les requêtes postgres de blocage complet?

J'utilise une déclaration de cette page pour afficher les requêtes de blocage dans 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;

Cependant, les requêtes sont tronquées, donc je ne vois généralement pas ce qu'il y a dans la clause WHERE, ce qui rend le débogage de ces problèmes de blocage très difficile. Existe-t-il un paramètre où je peux dire à postgres de consigner toutes les requêtes dans pg_stat_activity

9
Tony

La longueur de la requête suivie peut être trouvée dans le paramètre track_activity_query_size.

18.8.1. Collecteur de statistiques de requêtes et d'index

track_activity_query_size (integer)

Spécifie le nombre d'octets réservés pour suivre la commande en cours d'exécution pour chaque session active, pour le pg_stat_activity.current_query champ. La valeur par défaut est 1024 . Ce paramètre ne peut être défini qu'au démarrage du serveur.

par exemple. si tu avais track_activity_query_size=16384 dans votre configuration, cela signifierait que le texte de la requête jusqu'à 16 Ko serait collecté.

11
Federico Sierra