Comment puis-je chronométrer les requêtes SQL avec psql?

238

J'aimerais analyser certaines requêtes SQL par rapport à ma base de données PostgreSQL. Est-il possible de chronométrer les requêtes SQL avec psql?

Jonas
la source
4
Pour plus de détails sur l'analyse comparative des requêtes PostgreSQL: dba.stackexchange.com/q/42012/9622
Franck Dernoncourt

Réponses:

321

Il suffit d’allumer le timing en entrant:

\timing

Caleb
la source
1
A partir de bash, l'option "-c" de psqln'autorise pas ce réglage. Vous pouvez le faire avec quelque chose comme: psql --o /dev/null <<EOF \timing select 1 EOF
3manuek
6
Ou fairepsql -c '\timing' -c 'select 1'
cdmckay
12

L'heure qui \timingrevient inclut également la latence du réseau, si vous vous connectez à un serveur distant.

Si vous ne le souhaitez pas et que vous n'avez pas besoin de la sortie de la requête, utilisez plutôt EXPLAIN ANALYZEle plan de requête avec les estimations du planificateur plus les temps d'exécution réels.

par exemple, EXPLAIN ANALYZE SELECT foo from bar ;

Devi
la source
1
... le seul problème est que vous ne recevez pas la sortie de requête normale.
dezso
2
Utiliser des explain analyzetemps de rendement environ deux fois plus élevés que ce que je vois lors de l’utilisation \timing, ce qui est l’inverse de ce que j’attendais en me basant sur les commentaires formulés ici concernant la latence du réseau. Je soupçonne qu'il y a une surcharge dans l'exécution normale analyzequi ajoute au temps de requête. Sur la base de la documentation, je pense que EXPLAIN (ANALYZE, TIMING OFF) SELECT foo FROM barcela vous donnera des informations de chronométrage plus utiles. Voir postgresql.org/docs/9.6/static/sql-explain.html pour plus de détails.
larsks