GuíaIntermedio
Guía de Rendimiento de Bases de Datos y Optimización de Queries
Lleva tus APIs FastAPI de "funciona" a "escala" con performance tuning real de PostgreSQL. Esta guía profundiza en lectura completa de query plans con EXPLAIN ANALYZE, indexing avanzado (composite, covering, partial, expression, GIN), eliminación del problema N+1 en SQLAlchemy con `joinedload`/`selectinload`, profiling con `pg_stat_statements` y `auto_explain`, connection pooling con PgBouncer, autovacuum tuning, y refactor de los anti-patterns que rompen al escalar (OFFSET grande, COUNT(*) en tablas masivas, over-indexing). Diseñada para backend Python devs que ya completaron PostgreSQL & SQLAlchemy y necesitan llevar sus apps al siguiente nivel — y prepararse para entrevistas técnicas senior.
- 64
- lecciones
- 8
- módulos
- Inglés · Español
- disponible en
- Sí
- certificado
- Gratis
- acceso
Resultados
Lo que vas a poder hacer
- Leer query plans de PostgreSQL con confianza (cost, rows, buffers, JIT, scan types) y diagnosticar por qué cualquier query es lenta
- Diseñar índices avanzados que el planner realmente usa: composite (con leftmost prefix), covering (INCLUDE), partial (WHERE), expression e intro a GIN
- Detectar y eliminar el problema N+1 en SQLAlchemy con `joinedload`, `selectinload` y la lib `nplusone`
- Hacer profiling de queries en producción con `pg_stat_statements` y `auto_explain` para identificar las queries más caras sin adivinar
- Configurar PgBouncer (transaction vs session) y tunear pools async para FastAPI + asyncpg sin colapsar bajo carga
- Tunear estadísticas y autovacuum para que el planner tome buenas decisiones y evitar bloat en tablas MVCC
- Reconocer y refactorizar anti-patterns que rompen al escalar: OFFSET grande, COUNT(*) en tablas masivas, over-indexing, premature optimization
- Medir mejoras de performance con benchmarks before/after cuantificados usando `wrk`, `locust` y `pgbench`
Antes de empezar
Qué necesitas traer
Es para ti si...
- Backend Python devs (intermedio-senior) con apps FastAPI en producción con primeros síntomas de performance (queries lentos, timeouts ocasionales)
- Ingenieros que completaron la guía PostgreSQL & SQLAlchemy y quieren llevar lo aprendido al siguiente nivel
- Devs preparándose para entrevistas técnicas senior donde se pregunta EXPLAIN, indexing avanzado y pool sizing
- Equipos cuyo "silent killer" de latencia es el N+1 y no lo saben aún
- Cualquier dev backend cansado de adivinar por qué una query es lenta y listo para empezar a medir
Requisitos y materiales
- Guía PostgreSQL & SQLAlchemy completada (o equivalente: B-tree indexes básico, EXPLAIN básico, ACID, SQLAlchemy ORM con relationships)
- App FastAPI funcional con datos reales (>100k filas en al menos una tabla)
- PostgreSQL 14+ instalado localmente o en Docker
- Familiaridad con `psql` y syntax de SQLAlchemy 2.0 (`select()`, `Mapped`, `mapped_column`)
- Comodidad con async/await en Python
Contenido
El temario, módulo por módulo
Abre cualquiera para ver sus lecciones.
- Introducción: Performance Mindset & Benchmarking
- Latencia, throughput y percentiles
- Baselines reproducibles
- `pgbench`: benchmarks de PostgreSQL puro
- `wrk`: load testing HTTP rápido
- `locust`: load testing con escenarios Python
- Reportar mejoras con `BENCHMARKS.md`
- Proyecto del módulo: baseline de la Bookstore API
- Introducción: EXPLAIN ANALYZE en Profundidad
- `EXPLAIN` vs `EXPLAIN ANALYZE`: la diferencia que importa
- Leyendo query plans: estructura, orden y métricas
- Cost model y estimaciones: cómo decide el planner
- Sequential vs Index scans: cuándo gana cada uno
- Buffers y JIT: cache, IO y compilación de queries
- Herramientas de visualización de query plans
- Proyecto del módulo: diagnosticando la Bookstore API
- Módulo 3: Indexing avanzado
- Fundamentos B-tree revisitados con lente avanzado
- Composite indexes: orden de columnas y selectividad
- Covering indexes con `INCLUDE`: Index Only Scan
- Partial indexes: indexar solo lo que importa
- Expression indexes y preview de GIN/JSONB
- Mantenimiento de índices: bloat, REINDEX y detección de no usados
- Proyecto del módulo: Indexando Bookstore
- Módulo 4: El problema N+1 con SQLAlchemy
- ¿Qué es N+1 y por qué pasa?
- Detectando N+1 automaticamente: logs y la librería `nplusone`
- `joinedload` vs `selectinload`: cuándo gana cada uno
- `subqueryload`: la tercera estrategia que casi nunca eliges
- Relationships y `AsyncSession`: por qué async cambia las reglas
- Anti-patterns de eager loading: cuando el remedio es peor
- Proyecto del módulo 4: eliminando N+1 del bookstore
- Módulo 5: Query Profiling en Producción
- `pg_stat_statements`: instalación y fundamentos
- Leyendo `pg_stat_statements`: top queries
- `auto_explain`: capturando planes en producción
- `slow query log` y cuándo usarlo
- `pg_stat_activity` y locks en vivo
- Herramientas externas: pganalyze, pgwatch2 y otros
- Proyecto: profiling de bookstore en producción
- Módulo 6: Connection Pooling Avanzado
- Fundamentos del pool de conexiones
- SQLAlchemy pool tuning: cinco parámetros que importan
- asyncpg y AsyncEngine: el driver y los patrones de FastAPI
- PgBouncer fundamentos: el pool externo y sus tres modos
- PgBouncer + asyncpg: el gotcha de prepared statements y otros menores
- Pool sizing: fórmulas, async, y monitoreo continuo
- Entrega del módulo 6: tuneando el pool del bookstore
- Módulo 7: Statistics, Autovacuum & Planner
- Cómo decide el planner
- ANALYZE manual y estadísticas desactualizadas
- Estadísticas extendidas: cuando `ANALYZE` no alcanza
- MVCC y bloat: por qué UPDATE no es lo que crees
- Autovacuum: defaults, tuning per-tabla y monitoreo
- `VACUUM FULL` vs `pg_repack`: cómo recuperar espacio sin downtime
- Cost parameters para SSD + Mini-proyecto: planner que ignora un índice
- Módulo 8: Anti-Patterns y Proyecto Final
- Anti-pattern: OFFSET grande
- Anti-pattern: `COUNT(*)` lento
- Anti-pattern: Over-indexing
- Anti-patterns: Premature optimization + `SELECT *`
- Anti-patterns menores: funciones no-inmutables, `ORDER BY` sin `LIMIT`, `IN (...)` masivo
- Proyecto final: setup del Bookstore con 5 problemas plantados
- Proyecto final: ejecución y `BENCHMARKS.md` portfolio-worthy
Dónde encaja
Esta guía es parte de algo más grande
Se estudia dentro de estos programas, con acompañamiento y fechas.
Dudas frecuentes
Lo que suele preguntarse
Sin límite. Es una guía gratuita: entras cuando quieras, las veces que quieras.
No. Los módulos están ordenados de menos a más, pero puedes saltar al que necesites. Tu progreso se guarda por lección.
Lo que haga falta está en «Qué necesitas traer», arriba. Si no aparece nada ahí, puedes empezar desde cero.
En el grupo de WhatsApp del Club, y cada quince días hay un live con un instructor donde se resuelven dudas en vivo.
Sí. Al terminar todas las lecciones se emite automáticamente, con un código verificable que puedes compartir en LinkedIn.
No. Esta guía es autoguiada y sin fechas. El bootcamp es en vivo, por cohorte, con entregas que alguien revisa.
Empieza cuando quieras
Lo que dicen los estudiantes
Estas reseñas son de estudiantes inscritos que completaron al menos el 50% del curso. Moderamos las reseñas solo por motivos de contenido (spam, lenguaje ofensivo, datos personales), nunca por ser críticas o negativas.
Aún no hay reseñas aprobadas.
¡Sé el primero en compartir tu experiencia!