Error de MySQL: Conectar demasiado

Nota del editor: Siga esta publicación aquí Ajuste del rendimiento de MySQL 5.7 después de la instalación.

Siempre hemos recibido muchas preguntas aquí en Percona Support sobre cómo evitar el miedo. «Demasiadas conexiones» error, y también cuál es el valor recomendado para max_conexiones. Entonces, en este artículo, intentaré cubrir las mejores respuestas posibles a estas preguntas para que otros puedan mitigar tipos similares de problemas.

Mi colega Aurimas escribió hace un tiempo un maravilloso post sobre el cambio max_conexiones valor a través de GDB cuando el servidor MySQL se está ejecutando para deshacerse del «Demasiadas conexiones» error sin reiniciar MySQL.

para automáticamente 151 es el número máximo de conexiones de cliente simultáneas permitidas en MySQL 5.5. Si llega al límite de max_conexiones te entiendes «Demasiadas conexiones» error al intentar conectarse a su servidor MySQL. Esto significa que todas las conexiones disponibles están siendo utilizadas por otros clientes.

MySQL permite una conexión adicional por encima del límite max_connections que está reservado para usuarios de bases de datos que tienen el privilegio SUPER para diagnosticar problemas de conexión. Normalmente, el usuario administrador tiene este privilegio SUPER. Debe evitar otorgar privilegios SUPER a los usuarios de la aplicación.

MySQL usa un subproceso para las conexiones de los clientes y muchos subprocesos activos son asesinos del rendimiento. Por lo general, una gran cantidad de conexiones simultáneas que ejecutan solicitudes en paralelo pueden causar una ralentización significativa y aumentar las posibilidades de bloqueo. Antes de MySQL 5.5, no escalaba bien a pesar de que MySQL sigue siendo mejor de lo que solía ser, pero aún así, si tiene cientos de conexiones activas haciendo un trabajo real (eso no cuenta la suspensión). [idle] conexión) entonces aumenta el uso de la memoria. Cada conexión requiere un amortiguador de alambre. También implícito en las tablas de memoria se necesita más memoria más el requisito de memoria para los búferes globales. Además de eso, tmp_table_size / max_heap_table_size que cada conexión puede usar, incluso si no se asignan inmediatamente a una nueva conexión.

Un número excesivamente alto de conexiones.

La mayoría de las veces, un número excesivamente alto de conexiones es el resultado de errores en las aplicaciones que no cierran las conexiones correctamente o debido a un diseño incorrecto, ya que se establece la conexión con MySQL, pero luego la aplicación está ocupada haciendo algo más antes. cerrando el administrador de MySQL. . En los casos en que una aplicación no cierra las conexiones correctamente, espera_tiempo de espera es una configuración importante para sintonizar conexiones no utilizadas o inactivas para minimizar la cantidad de conexiones activas a su servidor MySQL, y esto finalmente lo ayudará a evitar «Demasiadas conexiones» error. Aunque algunos sistemas funcionan bien incluso con una gran cantidad de cables conectados, la mayoría de las conexiones están inactivas. En general, los subprocesos durmientes no ocupan demasiada memoria: 512 KB o menos. Subprocesos_en ejecución es una métrica valiosa para monitorear porque no cuenta los subprocesos de suspensión: muestra los activos y la cantidad de consultas procesadas actualmente, mientras que hilos_conectados Las variables de estado muestran todos los valores de los cables conectados, incluidas las conexiones inactivas. Peter escribió una hermosa publicación sobre esto. Puede encontrarlo aquí para obtener más detalles al respecto.

Si está utilizando el grupo de conexiones desde el lado de la aplicación, max_conexiones debe ser mayor que conexión máxima. La agrupación de conexiones también es una buena alternativa si espera una gran cantidad de conexiones.

Valor recomendado para max_conexiones

Depende de la cantidad de RAM disponible y del uso de memoria para cada conexión. Aumento max_conexiones El valor aumenta el número de descriptores de archivo que requiere mysqld. Nota: No hay un límite estricto para establecer el máximo max_conexiones valor. Entonces, tienes que elegir max_conexiones sabio en cuanto a su carga de trabajo, número de conexiones simultáneas al servidor MySQL, etc. En general, permita demasiado alto de un max_conexiones No se recomienda este valor porque en caso de algunas condiciones de bloqueo o ralentizaciones, si todas esas conexiones se ejecutan, pueden surgir grandes problemas de contingencia.

En el caso de conexiones activas que usan tablas temporales/de memoria, el uso de memoria puede ser aún mayor. En sistemas con una pequeña cantidad de RAM o con una gran cantidad de controles de conexión en el lado de la aplicación, podemos usar controles pequeños. max_conexiones valores como 100-300. Sistemas con 16G de RAM o superior max_conexiones = 1000 es una buena idea, y el búfer por conexión debe tener valores buenos/predeterminados, mientras que en algunos sistemas podemos ver hasta 8k como máximo de conexión, pero dichos sistemas generalmente se desbloquean en caso de picos de carga.

Para lidiar con esto, Oracle y el equipo de MariaDB implementaron piscina de alambre. Percona Server trajo esta característica de MariaDB. Lea aquí sobre su implementación en Percona Server. Con un grupo de cables bien configurado, puede esperar que el rendimiento NO disminuya para unos pocos miles de conexiones simultáneas, al menos para ciertos tipos de cargas de trabajo.

NOTA: Tenga en cuenta que en MySQL 5.6 se asigna mucha memoria cuando lo configura max_conexiones valor demasiado alto. Por favor revise este informe de error http://bugs.mysql.com/bug.php?id=68514

Conclusiones:
No hay una regla establecida para elegir el valor correcto max_conexiones porque depende de tu carga de trabajo. Tenga en cuenta que cada subproceso conectado necesita memoria costosa y conversión de contexto. Aconsejaría elegir un número razonable para max_conexiones en cuanto a su carga de trabajo e intente evitar demasiadas conexiones abiertas al mismo tiempo para que la aplicación funcione bien.

Author: Ing. Luis

A lo largo de conocer Windows y otros sistemas operativos me eh encontrado con diversos tipos de error, ahora brindo soluciones según mi experiencia-

Deja un comentario