CÓMO GESTIONAR EL POOL DE CONEXIONES EN MYSQL

El pool de conexiones es uno de los factores más importantes para lograr alto rendimiento, escalabilidad y estabilidad en aplicaciones que usan MySQL. Una mala gestión de conexiones puede provocar cuellos de botella, errores como “"Too many connections"”, lentitud extrema y alto consumo de recursos.

¿Qué es un Pool de Conexiones?

Un pool de conexiones es un caché de conexiones abiertas a la base de datos que se reutilizan entre las diferentes peticiones de la aplicación. En lugar de abrir y cerrar una conexión cada vez que se necesita, el pool mantiene las conexiones abiertas y listas para usar.

Beneficios principales

  • Reducción drástica del tiempo de respuesta
  • Menor consumo de CPU y memoria en el servidor MySQL
  • Mejor control de la concurrencia
  • Mayores peticiones por segundo
MySQL no dispone de un sistema de pooling en el servidor. Esta responsabilidad recae en:
  • La aplicación (librerías de conexión)
  • Middleware / Proxy como ProxySQL, MySQL Router
  • Plataformas gestionadas (PlanetScale, AWS RDS Proxy, etc.)

Configuración Recomendada en el Servidor MySQl

-- Ver estado actual
SHOW GLOBAL VARIABLES LIKE '%connect%';
SHOW GLOBAL STATUS LIKE 'Max_used_connections';
SHOW GLOBAL STATUS LIKE 'Threads_connected';

Configuración principal (my.cnf o my.ini)

[mysqld]
max_connections= 600 # Ajustar según RAM
wait_timeout  = 180
interactive_timeout = 180
max_idle_time  = 180 # MySQL 8.0.32+
thread_cache_size  = 80
Fórmula recomendada para "max_connections":
max_connections ≈ (RAM disponible para MySQL en MB) / 5
Ejemplos:
  • Servidor 8 GB RAM: 300–500 conexiones
  • Servidor 16 GB RAM: 600–1000 conexiones
  • Servidor 32 GB+ RAM: 1500+ con monitorización

Soluciones Avanzadas

Herramienta Nivel Mejor uso Dificultad
ProxySQL Alto Alta concurrencia, read/write split Media-Alta
MySQL Router Medio InnoDB Cluster / replicación Baja
AWS RDS Proxy Alto Entornos AWS serverless Muy baja
Vitess Muy Alto Sharding y escalabilidad horizontal Muy alta


ProxySQL es la opción más recomendada cuando se necesita máximo rendimiento y control.

buenas Prácticas

  • no usar nunca conexiones directas en cada petición.
  • Configurar "pool_recycle" / "maxLifetime" menor que "wait_timeout".
  • Activar "pool_pre_ping" o test de conexión, evitar conexiones muertas).
  • Monitorizar constantemente:
    • "Max_used_connections"
    • Conexiones en el pool (activas/idle)
    • "Aborted_connects"
    • "Threads_running"
  • Implementar reintentos inteligentes.
  • Separar lecturas y escrituras.
  • Usar siempre sentencias preparadas.