Saltar al contenido

Obtenga el tiempo de ejecución de la consulta de PostgreSQL

Después de consultar especialistas en esta materia, programadores de deferentes ramas y profesores hemos dado con la respuesta al problema y la plasmamos en este post.

Solución:

Si quiere decir en psql, en lugar de algún programa que esté escribiendo, use ? para la ayuda, y ver:

timing [on|off]       toggle timing of commands (currently off)

Y luego obtienes una salida como:

# timing on
Timing is on.

# select 1234;        
 ?column? 
----------
     1234
(1 row)

Time: 0.203 ms

Para fines de prueba, también puede utilizar EXPLAIN ANALYZE.

Puede usarlo así para verificar si mi versión adaptada de su consulta es, de hecho, más rápida:

EXPLAIN ANALYZE
SELECT DISTINCT born_on.name
FROM   born_on b
WHERE  floor(('2012-01-30'::date - b.dob) / 365.25) <= (
    SELECT floor((max(d1.dod - b1.dob)/365.25))
    FROM   born_on b1
    JOIN   died_on d1 USING (name)
    )
AND NOT EXISTS (
    SELECT *
    FROM   died_on d2
    WHERE  d2.name = b.name
    );

Muestra el tiempo de ejecución total además del plan de consulta. Ejecute un par de veces para excluir artefactos.
Un par de opciones están disponibles para más detalles.

PostgreSQL no es Transact-SQL. Estas son dos cosas ligeramente diferentes.

En PostgreSQL, esto sería algo similar a

DO $proc$
DECLARE
  StartTime timestamptz;
  EndTime timestamptz;
  Delta double precision;
BEGIN
  StartTime := clock_timestamp();
  PERFORM foo FROM bar; /* Put your query here, replacing SELECT with PERFORM */
  EndTime := clock_timestamp();
  Delta := 1000 * ( extract(epoch from EndTime) - extract(epoch from StartTime) );
  RAISE NOTICE 'Duration in millisecs=%', Delta;
END;
$proc$;

Por otro lado, medir el tiempo de consulta no tiene por qué ser tan complicado. Hay mejores formas:

  1. En el cliente de línea de comandos de postgres hay un timing función que mide el tiempo de consulta en el lado del cliente (similar a la duración en la esquina inferior derecha de SQL Server Management Studio).

  2. Es posible registrar la duración de la consulta en el registro del servidor (para cada consulta, o solo cuando duró más de X milisegundos).

  3. Es posible recopilar el tiempo del lado del servidor para cualquier declaración individual usando el EXPLAIN dominio:

    EXPLAIN (ANALYZE, BUFFERS) YOUR QUERY HERE;
    

valoraciones y reseñas

Recuerda que puedes dar difusión a este tutorial si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *