
Tengo 100 clientes de PC que se conectan a MySQL a través de LAN.
Están ejecutando consultas INSERT sin ningún período en particular. Estadísticamente, al mismo tiempo, no más de 10 PC están intentando ejecutar la consulta INSERT. Esto no es una limitación por diseño, es solo que la ejecución de consultas depende de la actividad de cada usuario de PC.
Cada cliente se conecta y desconecta cada vez que necesita ejecutar la consulta INSERT (conectar - insertar - desconectar).
Todo funcionó bien durante varios meses, pero hace unos días el cliente empezó a fallar al conectarse.
Aproximadamente dos veces al día, durante 5 a 10 minutos, los clientes no pueden conectarse. Reciben errores de tiempo de espera. Todos los clientes de PC fallan al conectarse durante este período de tiempo. Ninguno de ellos puede conectarse.
La hora del fracaso es aleatoria. A veces ocurre a las 09:00, a veces a las 13:00, etc. La actividad de cada usuario es bastante regular, por lo que no hay muchas diferencias de un día a otro. Quiero decir, la hora del día no parece significativa.
Mirando del lado del servidor, no veo errores en los registros de MySQL, ni fallas del servicio, ni reinicios del servidor. Solo tengo habilitado el registro de errores (sin registro de consultas, sin registro de consultas lentas).
Luego estaba buscando un problema de red, pero los tracerts de PC a servidor y de servidor a PC eran correctos.
Realicé una captura de red en el servidor (con Wireshark) para ver si puedo encontrar el error allí.
Durante el período de error (esos 5 a 10 minutos), veo conexiones de clientes de PC atascadas en el mensaje de "saludo". La PC cliente no envía una solicitud de "iniciar sesión" en respuesta.
Respuesta1
Al investigar los rastros de la red, encontré algunos problemas de resolución de nombres.
Estoy ejecutando la versión 5.1.41 de MySQL Community Edition. No sé si esto es cierto para versiones más actuales, pero en esta versión, la función "resolver nombre" está habilitada de forma predeterminada.
Con la resolución de nombres habilitada, cada vez que se inicia una conexión de red, MySQL intenta resolver el nombre de la PC del cliente a partir de su IP.
Si esta resolución de nombres falla por algo o se retrasa, puede causar problemas de conexión.
Con la resolución de nombres baja, obtenemos más conexiones fallidas y retrasadas cada vez que una PC cliente vuelve a intentarlo y, al final, no se logra ninguna conexión de red.
La solución es desactivar la resolución de nombres. Esta característica es importante si tiene privilegios definidos para algunos usuarios de MySQL que dependen del nombre de host del cliente. Pero como no tenemos ningún privilegio basado en el nombre de host del cliente (en lugar de eso usamos la dirección IP), podemos desactivar de forma segura la función de "resolución de nombre".
Este es el enlace que explica eso y me indica la dirección correcta y qué buscar en las capturas de red: