Postgres: Comment puis-je voir toutes les instructions SQL exécutées par le serveur de base de données?

23

Je suis en train de revoir chaque instruction SQL qu'une application effectue sur la base de données, pour des raisons de performances. Existe-t-il un moyen simple de consigner toutes les instructions exécutées par le serveur de base de données PostgreSQL? Merci.

Jin Kim
la source
Dans cette explication suivante est expliqué comment voir la requête en cours d'exécution tutorialdba.com/2016/11/pgstatactivity-view-explanation-in.html
nijam

Réponses:

27

L'option de configuration que vous recherchez est log_statement = "all"(si vous voulez juste les instructions), ou log_min_statement_duration = <some number>si vous êtes juste après des requêtes "lentes" (pour une valeur de "lent"). Voir http://www.postgresql.org/docs/current/static/runtime-config-logging.html pour plus de détails sur la configuration de la journalisation.

womble
la source
1
L'enregistrement de toutes les déclarations est un tueur de performance (comme indiqué dans les documents officiels). Cependant, 8.4 a une fonctionnalité intéressante pour obtenir explain analyzeune requête lente au moment où il a été exécuté, vous voudrez peut-être commencer à tester avec cela car 8.4 n'est pas encore publié, mais c'est une bonne option pour savoir ce qui se passe au moment de l'exécution , si la sortie d'analyse expliquée est OK, vous rencontrez probablement des problèmes avec les limites d'E / S ou de CPU, mais au moins vous saurez que ce n'est pas la requête elle
serverhorror
5
J'aime vraiment l'option log_statement = 'mod'. Il affiche uniquement les créations, les mises à jour et les suppressions, et ignore toutes les instructions de sélection. Idéal si vous essayez de déterminer quel code modifie un champ.
Don Kirkby
5

Le auto_explainmodule est très utile pour cela. Il enregistrera non seulement les instructions, mais également leurs plans d'exécution et pourra même enregistrer les instructions exécutées dans les fonctions PL / PgSQL. Les performances sont assez faibles, sauf si vous activez l'analyse, auquel cas vous subissez un peu de temps supplémentaire pour toutes les requêtes.

Voir auto_explaindans la documentation.

Craig Ringer
la source
Notez que "auto_explain" est un module, il ne fonctionne donc pas sur les bases de données AWS RDS Postgres :(
johntellsall
1
@johntellsall prend en charge RDS auto_explain, il est dans leur liste de modules bénis. Voir la documentation sur docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…
Craig Ringer
3

Bien sûr, vous pouvez détecter vous-même les requêtes les plus lentes, mais je vous conseille d'utiliser pgFouine - un analyseur de journaux PostgreSQL. C'est facile à installer et vraiment utile.

Exemples de rapports: ici et ici .

Severe_admin
la source
J'ai utilisé pgFouine sur un projet et identifié plusieurs endroits où un index aiderait beaucoup les choses.
Paul Tomblin