2010-03-12 10 views
56

J'ai besoin de voir les requêtes soumises à un serveur PostgreSQL. Normalement, j'utiliserais SQL Server profiler pour effectuer cette action dans SQL Server terrain, mais je dois encore trouver comment faire dans PostgreSQL. Il semble y avoir pas mal d'outils payants, j'espère qu'il existe une variante open source.Existe-t-il un équivalent PostgreSQL du profileur SQL Server?

Répondre

47

Vous pouvez utiliser le paramètre de configuration log_statement pour obtenir la liste de toutes les requêtes à un serveur

https://www.postgresql.org/docs/current/static/runtime-config-logging.html#guc-log-statement

Il suffit de définir que, et le chemin du fichier de journalisation et vous aurez la liste. Vous pouvez également le configurer pour ne consigner que les longues requêtes en cours d'exécution.

Vous pouvez ensuite prendre ces requêtes et lancer EXPLAIN sur eux pour savoir ce qui se passe avec eux.

http://www.designmagick.com/article/23/Using-Explain/Using-Explain/page/2

+1

parfait, a jeté une queue -f contre – BozoJoe

27

Ajout à la réponse de Joshua, pour voir which queries are currently running simplement publier la déclaration suivante à tout moment (par exemple, dans la fenêtre de requête de pgAdminIII):

SELECT datname,procpid,current_query FROM pg_stat_activity; 

Exemple de sortie:

 datname | procpid | current_query 
---------------+---------+--------------- 
    mydatabaseabc | 2587 | <IDLE> 
    anotherdb  | 15726 | SELECT * FROM users WHERE id=123 ; 
    mydatabaseabc | 15851 | <IDLE> 
(3 rows) 
+2

Avec ma version de PG (9.3), j'utilise la requête suivante: SELECT datname, pid, usename, application_name, client_addr, requête FROM pg_stat_activity; pg_stat_activity est une vue de la base de données 'postgresql' – mrmuggles

+1

SELECT client_addr, state_change, requête FROM pg_stat_activity; – Dmitry

21

J'ai découvert pgBadger (http://dalibo.github.io/pgbadger/) et c'est un outil fantastique qui m'a sauvé la vie plusieurs fois. Voici un exemple de rapport: http://dalibo.github.io/pgbadger/samplev4.html. Si vous l'ouvrez et allez dans le menu 'top', vous pouvez voir les requêtes les plus lentes et les requêtes qui prennent beaucoup de temps. Ensuite, vous pouvez demander des détails et voir de beaux graphiques qui vous montrent les requêtes par heure et si vous utilisez le bouton de détail, vous pouvez voir le texte SQL dans un joli formulaire. Donc je peux voir que cet outil est gratuit et parfait.

+1

Assez joli outil. J'ai utilisé ce tutoriel pour l'installer, comme le doc officiel est assez verbeux: https://www.dhis2.org/analysing-postgresql-logs-using-pgbadger – mrmuggles

+0

Juste une note, que l'outil est pour les systèmes * nix seulement, qui craint pour les utilisateurs de Windows –

0

Ajouter à Joshua et la réponse de vladr

Il fonctionne pour moi:

postgresql.conf Ouvrir

Set:

log_statement = 'mod'

log_min_messages = debug2

Ouvrir le dernier journal t dossier C: \ Program Files \ PostgreSQL \ 9.6 \ data \ pg_log \

Les requêtes seront là.

J'utilise postgresql-9.6.5-1