PostgreSQL: optimización de consultas para humanos comunes y corrientes | de Eyal Trabelsi | diciembre 2024

PostgreSQL: optimización de consultas para humanos comunes y corrientes | de Eyal Trabelsi | diciembre 2024

Usaremos esto como ejemplo de una consulta simple: queremos contar la cantidad de usuarios que no tienen un identificador de Twitter.

EXPLAIN ANALYZE
SELECT COUNT(*) FROM users WHERE twitter != '';
Podemos ver el plan de ejecución devuelto por la cláusula EXPLAIN ANALYZE.

Esto parece críptico al principio, y es incluso más largo que nuestra consulta, y esto en un pequeño ejemplo de planes de ejecución reales puede ser abrumador si no te concentras 😭.

Pero sí proporciona información útil. Podemos ver que ejecutar la consulta tomó 1,27 segundos, mientras que planificar la consulta tomó solo 0,4 milisegundos (tiempo insignificante).

Podemos ver el tiempo que lleva planificar y ejecutar consultas.

El plan de ejecución se estructura como un árbol inverso. En la siguiente figura se puede ver que el plan de ejecución está dividido en diferentes nodos cada uno de los cuales representa una operación diferente, ya sea una operación Agregación o un Exploración.

Podemos ver el tiempo que lleva planificar y ejecutar consultas.

Existen muchos tipos de operaciones de nodo, desde las relacionadas con el análisis (“Escaneo secuencial”, “Sólo escaneo de índice”, etc.), Únase a los asociados ( ‘Unión hash’, ‘Bucle anidado’, etc.), Relacionado con la agregación (“GrupoAgregado”, “Agregado”, etc…) y otros (‘Limitar’, ‘Ordenar’, ‘materializar’, etc.). Afortunadamente, hay que recordar todo esto.

Consejo profesional n.º 3 💃: El enfoque es clave, solo mira los nodos problemáticos.

Consejo profesional n.º 4 💃: ¡Haz trampa! en los nodos problemáticos, busque lo que significan en el explicar el glosario.

Ahora veamos cómo saber cuál es el nodo problemático.

Hay mucha información que podemos ver sobre cada nodo.

Veamos qué significan realmente estas medidas.

  • rizos reales: El número de bucles ejecutados por el mismo nodo es 1. Para obtener el tiempo total y las filas, el tiempo y las filas reales deben multiplicarse por los valores del bucle.
  • Líneas reales: el número real de líneas producidas a partir del AGREGAR el nodo es 1 (el promedio por bucle y tenemos bucles es 1).
  • Líneas del plan: el número estimado de líneas producidas a partir de AGREGAR El nodo es 1. El número estimado de filas puede ser incorrecto según las estadísticas.
  • Tiempo de inicio real: el tiempo que tardó en devolver la primera fila en milisegundos del AGREGAR el nodo es 1271.157 (agregado e incluye operaciones anteriores).
  • Costo inicial: unidades arbitrarias que representan el tiempo estimado para devolver la primera fila del AGREGAR El nodo es 845110 (agregado e incluye operaciones anteriores).
  • tiempo total real: el tiempo que tomó devolver todas las filas en ms del AGREGAR el nodo es 1271.158 (el promedio por bucle y tenemos bucles es 1 y agregado e incluye operaciones anteriores).
  • Costo total: unidades arbitrarias que representan el tiempo estimado para devolver todas las filas de AGREGAR el nodo es 845110 (agregado).
  • Ancho del plano: el tamaño promedio estimado de las líneas del AGREGAR el nodo es de 8 bytes.

Consejo profesional n.º 5 💃: cuidado con los rizos, recuerda aumentar el número de rizos cuando quieras Líneas reales Y Tiempo total real.

Exploraremos en la siguiente sección un ejemplo práctico.