La presentación de este error puede variar según el software utilizado, este ejemplo corresponde al generador generado tras conectarse a BBDD MySQL a través de ODBC con Microsoft Visual Studio .NET.
Otros síntomas:
- La aplicación ha podido conectarse anteriormente a la base de datos sin problemas.
- Tras esperar un cierto tiempo (por ejemplo 1 minuto o 2) la aplicación puede volver a conectarse a la BBDD.
- El error parece manifestarse tras condiciones de gran exigencia, cuando el número de conexiones abiertas y cerradas en un corto espacio de tiempo son altas.
El error no es causado por MySQL o el controlador ODBC de MySQL, sino por el comportamiento de Windows. Por motivos de rendimiento, Windows mantiene una conexión en un puerto TCP después de que este sea cerrado (por defecto) 4 minutos. La ventaja de esto es que si la conexión tiene que volver a abrirse se puede realizar a un costo menor. El problema es que bajo una carga pesada, cuando un gran número de conexiones se abren y se cierran, el sistema puede alcanzar el número máximo de conexiones permitidas (a pesar que en la aplicación las conexiones se hayan cerrado).
Solución
1. Para reducir la demora antes de que Windows lance una conexión TCP abierta, edite la siguiente entrada en el Registro de Windows:
HKEY_Local_Machine\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpTimedWaitDelay
Este valor no existe por defecto y tendrá que ser creado. Debe ser de tipo DWORD. El rango válido es de 0x1E - 0x12C (30 segundos a 300 segundos), el valor predeterminado es de 0xF0 (240 segundos).
La disminución de este valor debe ayudar, pero no puede resolver definitivamente el problema para un sistema ocupado (porque si el sistema está ocupado los límites también se verán afectados).
2. Considere si es posible modificar la aplicación para que la conexión se re-utilice en lugar de cerrar y abrirla sucesivamente.
En teoría la agrupación de conexiones también podría resolver este problema. http://support.microsoft.com/default.aspx?scid=kb; EN-US; q169470