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
?
postgresql
benchmark
psql
Jonas
la source
la source
Réponses:
Il suffit d’allumer le timing en entrant:
\timing
la source
psql
n'autorise pas ce réglage. Vous pouvez le faire avec quelque chose comme:psql --o /dev/null <<EOF \timing select 1 EOF
psql -c '\timing' -c 'select 1'
Le timing peut être activé avec
\timing
l'invite psql (comme Caleb l'a déjà dit).Si vous utilisez la version 8.4 ou une version ultérieure, vous pouvez ajouter un argument optionnel on / off
\timing
, ce qui peut être utile si vous souhaitez pouvoir activer la synchronisation dans .psqlrc . Vous pouvez ensuite définir\timing on
explicitement dans un script où plain\timing
serait basculer. ça éteintla source
L'heure qui
\timing
revient 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 ANALYZE
le 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 ;
la source
explain analyze
temps 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 normaleanalyze
qui ajoute au temps de requête. Sur la base de la documentation, je pense queEXPLAIN (ANALYZE, TIMING OFF) SELECT foo FROM bar
cela vous donnera des informations de chronométrage plus utiles. Voir postgresql.org/docs/9.6/static/sql-explain.html pour plus de détails.