web-dev-qa-db-fra.com

Comment mesurer avec précision le temps de requête dans PostgreSQL (car Expliquer Analyze ne semble pas le faire)?

Je sais que Expliquer Analyser retourne la durée de la requête, mais elle ne semble pas le faire pour mon cas d'utilisation. (Sauf si je manque quelque chose ... que pourrait-il être ...?)

SELECT cars.*, users.*, makers.*, places.*
  FROM cars
  LEFT OUTER JOIN "users" ON "users"."id" = "cars"."user_id" 
  LEFT OUTER JOIN "makers" ON "makers"."id" = "cars"."company_id" 
  LEFT OUTER JOIN "places" ON "places"."id" = "cars"."location_id" 
  WHERE "cars"."deleted_at" IS NULL 
    AND "cars"."draft" = 'f' 
    AND ((cars.reference_number::text ILIKE '%abc123%') 
      OR (makers.name::text ILIKE '%abc123%') 
      OR (places.name::text ILIKE '%abc123%'))  
  ORDER BY cars.id DESC NULLS LAST 
  LIMIT 20 
  OFFSET 0;

Expliquez l'analyse d'analyse:

Planning time: 1.300 ms
Execution time: 105.936 ms

Sélectionnez Sortie à l'aide de\Timing:

Time: 2100.704 ms (00:02.101)

Il semble que Expliquer Analyze n'inclut pas le temps de lire les données.

Comment puis-je obtenir le temps total sans utiliser SQL (et pas la console PSQL)?

PostgreSQL 9.6.6

2
B Seven

De a_horse_with_no_name dans les commentaires,

Le temps rapporté par Explication (Analyser) n'inclut pas le temps nécessaire pour envoyer les données au client SQL. C'est le moment où le serveur doit préparer complètement le résultat de manière à pouvoir être envoyé au conducteur. Comme tout délai après cela est totalement à la combinaison du client SQL et du réseau entre client et serveur, il est impossible d'expliquer de montrer que

C'est à peu près tout ce qu'il y a aussi. L'un d'entre eux est le côté serveur, l'autre côté réseau.

1
Evan Carroll

Si vous souhaitez inclure le temps de réseau et du client, lancez et arrêtez votre minuterie dans le client; quel que soit le client qui pourrait être.

0
jjanes