Compartir a través de


Algoritmo de reintento de conexión (para conexiones TCP/IP)

En una conexión TCP/IP, si el cliente ejecuta Microsoft Windows XP o una versión posterior cuando los nombres de ambos asociados están en caché, el proveedor de acceso a datos se ajusta a un algoritmo de reintento de conexión. Esto se cumple para establecer la conexión inicial a la sesión y para volver a conectarse después de que una conexión establecida se haya perdido. Una vez que se ha abierto una conexión, finalizar los pasos previos de inicio de sesión y el inicio de sesión requiere tiempo adicional.

[!NOTA]

El tiempo empleado en abrir una conexión puede superar el tiempo de reintento debido a factores externos como, por ejemplo, lentas búsquedas de DNS, un controlador de dominio/KDC (Kerberos Key Distribution Center) lento, el tiempo necesario para contactar con el Explorador de SQL Server, congestión de la red, etc. Estos factores externos pueden impedir que un cliente se conecte a una base de datos reflejada. Además, los factores externos pueden hacer que una conexión tarde más en abrirse que el tiempo de reintento asignado. Para obtener información acerca de la omisión de DNS y el Explorador de SQL Server en el intento de conexión al asociado inicial, vea Establecer la conexión inicial en una sesión de creación de reflejo de la base de datos.

Si el intento de conexión genera un error o el tiempo de reintento caduca antes de que se realice correctamente, el proveedor de acceso a datos probará con el otro asociado. Si este punto no abre una conexión, el proveedor probará, de forma alternativa, con los nombre inicial y del asociado de conmutación por error, hasta que se abra una conexión o el periodo de inicio de sesión se agote. El periodo de tiempo de espera predeterminado es de 15 segundos. Es recomendable que el periodo de espera de inicio de sesión sea de 5 segundos o más. Si se especifica un periodo de tiempo de espera menor, es posible que ningún intento de conexión pueda realizarse correctamente.

El tiempo de reintento es un porcentaje del periodo de inicio de sesión. El tiempo de reintento de una conexión es mayor en cada ciclo sucesivo. En el primer ciclo, el tiempo de reintento de cada uno de los dos intentos es el 8 por ciento del periodo de inicio de sesión total. En cada ciclo sucesivo, el algoritmo de reintento incrementa el tiempo máximo de reintento en la misma cantidad. De esta forma, los tiempos de reintento de las primeras ocho conexiones son las siguientes:

8%, 8%, 16%, 16%, 24%, 24%, 32%, 32%

El tiempo de reintento se calcula mediante la siguiente fórmula:

RetryTime**=PreviousRetryTime+(** 0,08 *LoginTimeout)

Donde PreviousRetryTime es inicialmente 0.

Por ejemplo, si se usa el periodo de tiempo de espera predeterminado de 15 segundos, LoginTimeout = 15. En este caso, los tiempos de reintento en los primeros tres ciclos son los siguientes:

Ciclo

Cálculo de RetryTime

Tiempo de reintento por intento

1

0 +(0.08 * 15)

1,2 segundos

2

1.2 +(0.08 * 15)

2,4 segundos

3

2.4 +(0.08 * 15)

3,6 segundos

4

3.6 +(0.08 * 15)

4,8 segundos

En la siguiente ilustración se muestran los tiempos de reintento para intentos de conexión sucesivos, cada uno de los cuales se agota.

Número máximo de intervalos entre reintentos para un tiempo de espera de inicio de sesión de 15 segundos

Para el periodo de espera de inicio de sesión predeterminado, el tiempo máximo asignado para los primeros tres ciclos de intentos de conexión es de 14,4 segundos. Si cada intento utilizase todo el tiempo que tiene asignado, sólo quedarían 0,6 segundos antes de que el periodo de inicio de sesión se agotara. En este caso, el cuarto ciclo se acortaría y sólo se permitiría un intento final rápido para conectarse mediante el nombre del asociado inicial. No obstante, un intento de conexión puede generar un error en menos tiempo que el tiempo de reintento asignado, especialmente en los ciclos posteriores. Por ejemplo, la recepción de un error de red puede causar que un intento termine antes de que el tiempo de reintento se agote. Si los primeros intentos no se realizan correctamente debido a errores de red, habría tiempo disponible adicional para el cuarto ciclo y, probablemente, para ciclos adicionales.

Otra razón de que un intento genere un error es una instancia de servidor inactiva, como pasa cuando una instancia de servidor se encuentra ocupada en realizar la conmutación por error de su base de datos. En este caso, se impone un intervalo entre reintentos para evitar que los clientes sobrecarguen a los asociados con una rápida sucesión de intentos de conexión.

[!NOTA]

Cuando ambos nombres de asociados están disponibles, si el periodo de espera de inicio de sesión es infinito, el cliente intenta volver a conectarse a los servidores de forma indefinida, alternando entre el nombre del asociado inicial y el nombre del asociado por conmutación por error.

Intervalos de reintento durante la conmutación por error

Si un cliente intenta conectarse a un asociado que está en conmutación por error, éste responde inmediatamente que se encuentra inactivo. En este caso, cada ciclo de intentos de conexión es mucho más breve que el tiempo de reintento asignado. Esto significa que pueden producirse muchos ciclos de intentos de conexión antes de que el periodo de inicio de sesión se agote. Para evitar la sobrecarga de los asociados con una rápida serie de intentos de conexión durante una conmutación por error, el proveedor de acceso a datos agrega un breve intervalo entre reintentos después de cada ciclo. La longitud de un intervalo entre reintentos determinado se define mediante el algoritmo de intervalos entre reintentos. Después del primer ciclo, el intervalo es de 100 milisegundos. Después de cada uno de los siguientes tres ciclos, el intervalo entre reintentos se duplica: 200, 400 y 800. En todos los ciclos posteriores, el intervalo entre reintentos es de 1 segundo hasta que la conexión se realiza correctamente o se supera el tiempo de espera.

[!NOTA]

Si la instancia de servidor se detiene, la solicitud de conexión genera un error de forma inmediata.

En la siguiente ilustración se muestra cómo los intervalos entre reintentos afectan a los intentos de conexión durante una conmutación por error manual, donde los asociados conmutan sus funciones. El periodo de tiempo de espera de inicio de sesión es de 15 segundos.

Algoritmo de intervalo entre reintentos