pg_stat_statements: consultas principales
Habilite pg_stat_statements, encuentre las consultas más pesadas por tiempo total y optimícelas de forma específica.
pg_stat_statements: consultas principales es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 1 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.
Qué ofrece pg_stat_statements
Un registro acumulativo de todas las consultas, normalizadas según su forma; es la herramienta de DBA más útil de PostgreSQL.
Habilitarlo
Es una extensión contrib. Añádala a shared_preload_libraries y reinicie:
-- postgresql.conf
shared_preload_libraries = 'pg_stat_statements'
-- After restart:
CREATE EXTENSION pg_stat_statements;Consultas principales por tiempo total
La consulta «¿en qué se está consumiendo mi CPU?»:
SELECT calls,
total_exec_time,
mean_exec_time,
rows,
query
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;Consultas lentas por llamada
Consultas que son lentas en cada llamada:
SELECT mean_exec_time, calls, query
FROM pg_stat_statements
WHERE mean_exec_time > 100
ORDER BY mean_exec_time DESC
LIMIT 20;Consultas frecuentes y económicas
Un millón de consultas de 1 ms sigue siendo un problema:
SELECT calls, mean_exec_time, total_exec_time, query
FROM pg_stat_statements
ORDER BY calls DESC
LIMIT 20;Normalización
pg_stat_statements agrupa las consultas según su forma normalizada y reemplaza los literales por $N. Así, «SELECT * FROM users WHERE id = 1» y «= 2» aparecen en la misma fila.
Restablecer las estadísticas
Empiece desde cero después de un despliegue para medir el comportamiento nuevo:
SELECT pg_stat_statements_reset();Tiempo de E/S frente a tiempo de CPU
Las versiones más recientes de PG separan el tiempo de ejecución. shared_blks_hit / shared_blks_read indican si los datos proceden de la caché o del disco:
SELECT query, shared_blks_hit, shared_blks_read,
shared_blks_read::FLOAT / NULLIF(shared_blks_hit + shared_blks_read, 0) AS read_ratio
FROM pg_stat_statements
ORDER BY shared_blks_read DESC LIMIT 20;JIT y tiempo de planificación
PG 13 y posteriores exponen total_plan_time. Algunas consultas pasan más tiempo en PLANIFICACIÓN que ejecutándose; normalmente es una señal para utilizar prepared statements.
Estadísticas por base de datos y por usuario
pg_stat_statements abarca todo el clúster. Filtre por las columnas dbid y userid para obtener vistas por base de datos o por usuario.
Combinar con EXPLAIN ANALYZE
pg_stat_statements le indica QUÉ consultas son lentas. EXPLAIN ANALYZE le indica POR QUÉ.
Advertencias
- La acumulación por base de datos y por usuario puede ocultar problemas; revise el total
- No registra el tiempo por fila, solo el total por llamada
- Se restablece al reiniciar o al ejecutar la llamada de restablecimiento
Resumen
pg_stat_statements es obligatorio en producción.
- Principales por tiempo total: mayores beneficios potenciales
- Principales por media: lentitud constante
- Principales por número de llamadas: problema de frecuencia
- Combínelo con EXPLAIN para aplicar correcciones
Comprobación rápida
Ha habilitado pg_stat_statements. ¿Qué consulta permite investigar las mejoras de rendimiento más importantes?
Preguntas frecuentes
¿La lección «pg_stat_statements: consultas principales» es gratis?
Sí — el texto completo de «pg_stat_statements: consultas principales» 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 «pg_stat_statements: consultas principales»?
Habilite pg_stat_statements, encuentre las consultas más pesadas por tiempo total y optimícelas de forma específica. 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 1 de 4.
¿Cuánto tiempo toma la lección «pg_stat_statements: consultas principales»?
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
- pg_stat_statements: consultas principales
- pgBadger para analizar registros
- Agrupación de conexiones: PgBouncer
- Planificación de capacidad y auditorías de fragmentación