2009-08-06 4 views
2

Je suis dans une situation où j'ai beaucoup de connexions qui sont "IDLE dans la transaction". J'ai les ai repérés moi-même. Je pourrais les tuer, mais cela ne les empêcherait pas de se reproduire. En fait, cela arrive régulièrement.Existe-t-il un moyen d'obtenir la liste des instructions SQL précédemment exécutées dans le cadre d'une transaction donnée dans PostgreSQL?

Existe-t-il un moyen d'exécuter la liste des instructions SQL précédemment exécutées dans le cadre d'une transaction donnée?

Si je pouvais obtenir cela, il serait beaucoup plus facile de comprendre le client mauvaise conduite.

Répondre

2

Il y a du travail en ce moment sur la liste de diffusion de pgsql-hackers pour ajouter exactement cette capacité, sous le titre "afficher la chaîne de requête précédente de la transaction inactive". Où cela semble aller, pg_stat_activity aura une nouvelle colonne nommée quelque chose comme "last_query" qui inclut l'information que vous voulez. Jusqu'à ce que cela soit fait et disponible probablement dans la prochaine version, la suggestion de depesz est probablement aussi bonne que celle que vous obtiendrez ici - à moins que vous ne vouliez commencer à attraper des patches précoces fonctionnant sur cette fonctionnalité au fur et à mesure.

2

Fondamentalement - vous devez activer toutes les consignes d'enregistrement, avec le temps d'exécution. Le meilleur moyen d'y parvenir est d'utiliser log_min_duration_statement avec la valeur 0, et d'utiliser log_line_prefix de telle sorte qu'il inclura les informations requises pour correspondre aux lignes provenant du même backend.

J'utilise généralement log_line_prefix = '% m% u @% d% p% r'. Par la suite, vous pouvez écrire un outil pour vous aider à effectuer une recherche inactive, ou vous pouvez utiliser mine.

+0

Cela a un impact considérable sur les performances et nécessite une journalisation complète à tout moment. Ce serait plus facile si une fonction ou une vue système pouvait être appelée avec un ID de transaction. –

+0

Je n'ai jamais remarqué ce coup. –