Identificación y corrección de consultas lentas
Utilice pg_stat_statements, log_min_duration_statement y EXPLAIN para encontrar consultas lentas y aplicar correcciones específicas.
Identificación y corrección de consultas lentas es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
Paso 1: encuentre las consultas lentas
No optimice a ciegas. Use:
pg_stat_statements— consultas principales por tiempo totallog_min_duration_statement— registra las consultas que superan un umbral- pgBadger — informes claros a partir de los registros
Configuración de pg_stat_statements
Active la extensión y configure shared_preload_libraries:
-- postgresql.conf
shared_preload_libraries = 'pg_stat_statements'
-- After restart:
CREATE EXTENSION pg_stat_statements;Las 10 consultas más costosas
La consulta más útil para cualquier DBA:
SELECT query,
calls,
total_exec_time,
mean_exec_time,
rows
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;Registre las consultas lentas
Establezca un umbral y lea el registro:
-- postgresql.conf
log_min_duration_statement = '500ms'
-- All queries running > 500ms are logged.Paso 2: reproduzca el problema con EXPLAIN ANALYZE
Para cada consulta lenta, ejecute EXPLAIN ANALYZE en un entorno representativo, con datos similares a los de producción. Observe:
- El nodo con el mayor tiempo real
- La mayor diferencia entre las filas estimadas y las reales
- Si se utilizan los índices adecuados
Soluciones frecuentes
- Falta un índice en una columna de WHERE o JOIN
- Predicado no sargable, con una función sobre la columna: añada un índice de expresión o reescriba la consulta
- Estadísticas desactualizadas: ejecute ANALYZE
- Tipo de datos incorrecto, que provoca una conversión implícita: corrija el tipo de la columna
- Condiciones OR: reescriba la consulta como una UNION de consultas con una sola condición
- SELECT * obtiene demasiados datos: reduzca la proyección
Estadísticas desactualizadas
Si las filas estimadas difieren mucho de las reales, ejecute primero ANALYZE:
ANALYZE orders;
-- Or rely on autovacuum to do it periodically.Comprobación de índices
Enumere los índices de una tabla y sus tamaños:
SELECT indexrelname, pg_size_pretty(pg_relation_size(indexrelid))
FROM pg_stat_user_indexes
WHERE relname = 'orders'
ORDER BY pg_relation_size(indexrelid) DESC;Índices sin uso
Busque los índices que nunca se utilizan:
SELECT schemaname, relname, indexrelname, idx_scan
FROM pg_stat_user_indexes
WHERE idx_scan = 0
ORDER BY pg_relation_size(indexrelid) DESC;
-- Consider dropping them — they slow writes for no read benefit.Contención de bloqueos
A veces una consulta es «lenta» porque está esperando un bloqueo. Compruebe pg_stat_activity para consultar wait_event:
SELECT pid, state, wait_event_type, wait_event, query
FROM pg_stat_activity
WHERE state <> 'idle';Patrones de reescritura de consultas
- Mueva los filtros a WHERE
- Sustituya la subconsulta correlacionada de SELECT por JOIN + GROUP BY
- Sustituya OR por una UNION ALL de consultas indexadas
- Use funciones de ventana en lugar de autocombinaciones
- Materialice las subconsultas repetidas con CTE, cuando el planificador esté confundido
Itere
La optimización del rendimiento es un ciclo: medir → plantear una hipótesis → cambiar → medir. No adivine.
Resumen
Encuentre las consultas lentas con pg_stat_statements, diagnostíquelas con EXPLAIN ANALYZE, corríjalas con índices, ANALYZE o reescrituras, y repita el proceso.
Comprobación rápida
¿Qué extensión de PostgreSQL muestra las consultas que más tiempo consumen según su tiempo total de ejecución?
Preguntas frecuentes
¿La lección «Identificación y corrección de consultas lentas» es gratis?
Sí — el texto completo de «Identificación y corrección de consultas lentas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Identificación y corrección de consultas lentas»?
Utilice pg_stat_statements, log_min_duration_statement y EXPLAIN para encontrar consultas lentas y aplicar correcciones específicas. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Academy?
No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Identificación y corrección de consultas lentas»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Academy?
Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Interpretación de EXPLAIN y EXPLAIN ANALYZE
- Escaneos secuenciales frente a escaneos mediante índices
- Hash Join frente a Merge Join y Nested Loop
- Identificación y corrección de consultas lentas