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.
database
sql
postgresql
Jin Kim
la source
la source
Réponses:
L'option de configuration que vous recherchez est
log_statement = "all"
(si vous voulez juste les instructions), oulog_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.la source
explain analyze
une 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 elleLe
auto_explain
module 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_explain
dans la documentation.la source
auto_explain
, il est dans leur liste de modules bénis. Voir la documentation sur docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…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 .
la source