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
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é.