Comment afficher les requêtes postgres de blocage complet?

9

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 WHEREclause, ce qui rend le débogage de ces problèmes de blocage très difficile. Existe-t-il un paramètre dans lequel je peux dire à postgres de consigner toutes les requêtespg_stat_activity

Tony
la source

Réponses:

11

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ête 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_querychamp. La valeur par défaut est 1024 . Ce paramètre ne peut être défini qu'au démarrage du serveur.

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


la source
1
Juste pour être sûr que c'est clair (comme indiqué dans la citation, ce qui pourrait être négligé) ... changer cette option de configuration nécessitera un redémarrage du serveur pour qu'elle prenne effet.
Joishi Bodio