Condividi tramite


Algoritmo di riesecuzione dei tentativi di connessione (per connessioni TCP/IP)

Per una connessione TCP/IP, se nel client è eseguito Microsoft Windows XP o versioni successive, quando entrambi i nomi partner si trovano nella cache, il provider di accesso ai dati applica un algoritmo di riesecuzione dei tentativi di connessione. Questa operazione viene eseguita sia per eseguire la connessione iniziale alla sessione sia per eseguire la riconnessione dopo aver perso la connessione stabilita. Dopo avere aperto una connessione, è necessario ulteriore tempo per il completamento dei passaggi di pre-accesso e di accesso.

[!NOTA]

Il tempo impiegato nell'apertura di una connessione può superare il tempo di riesecuzione dei tentativi a causa di fattori esterni, ad esempio ricerche DNS lente, lentezza del controller di dominio o del centro di distribuzione chiave (KDC) Kerberos, tempo impiegato per contattare SQL Server Browser, traffico di rete intenso e così via. Tali fattori esterni possono impedire a un client di connettersi a un database con mirroring. Inoltre, questi fattori esterni possono fare sì che una connessione richieda più tempo del tempo di riesecuzione dei tentativi stabilito. Per informazioni su come ignorare DNS e SQL Server Browser per il tentativo di connessione al partner iniziale, vedere Creazione della connessione iniziale a una sessione di mirroring del database.

Se un tentativo di connessione ha esito negativo o il tempo di riesecuzione dei tentativi scade prima che abbia esito positivo, il provider di accesso ai dati tenterà la connessione all'altro partner. Se a questo punto non è ancora stata aperta una connessione, il provider tenterà alternativamente i nomi partner iniziale e di failover finché non verrà aperta una connessione o fino al timeout del periodo di accesso. Il periodo di timeout di accesso predefinito è 15 secondi. È consigliabile utilizzare un periodo di timeout di accesso di almeno 5 secondi. L'utilizzo di un periodo di timeout più breve può impedire qualsiasi tentativo di connessione.

Il tempo di riesecuzione dei tentativi è una percentuale del periodo di accesso. Il tempo di riesecuzione dei tentativi di connessione è maggiore in ogni ciclo successivo. Nel primo ciclo, il tempo di riesecuzione per ognuno dei due tentativi è l'8% del periodo di accesso totale. In ogni ciclo successivo, l'algoritmo di riesecuzione dei tentativi aumenta dello stesso valore il tempo massimo di riesecuzione. I tempi di riesecuzione dei primi otto tentativi di connessione sono pertanto i seguenti:

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

Il tempo di riesecuzione dei tentativi viene calcolato mediante la formula seguente:

RetryTime**=PreviousRetryTime+(** 0.08 *LoginTimeout)

Dove PreviousRetryTime è inizialmente pari a 0.

Ad esempio, se si utilizza il periodo di timeout di accesso predefinito di 15 secondi, LoginTimeout = 15. In questo caso, i tempi di riesecuzione dei tentativi stabiliti nei primi tre cicli sono i seguenti:

Ciclo

Calcolo RetryTime

Tempo di riesecuzione per tentativo

1

0 +(0.08 * 15)

1,2 secondi

2

1.2 +(0.08 * 15)

2,4 secondi

3

2.4 +(0.08 * 15)

3,6 secondi

4

3.6 +(0.08 * 15)

4,8 secondi

Nella figura seguente vengono illustrati questi tempi di riesecuzione dei tentativi di connessione successivi, per ognuno dei quali si verifica il timeout.

Ritardo massimo tra i tentativi di riesecuzione per un timeout di accesso di 15 secondi

Per il periodo di timeout di accesso predefinito, il tempo massimo stabilito per i primi tre cicli di tentativi di connessione è pari a 14,4 secondi. Se ogni tentativo richiedesse tutto il tempo stabilito, rimarrebbero solo 0,6 secondi di tempo prima del timeout del periodo di accesso. In tal caso, il quarto ciclo verrebbe abbreviato consentendo solo un rapido tentativo finale di connessione mediante il nome partner iniziale. Un tentativo di connessione può tuttavia dare esito negativo prima della scadenza del tempo di riesecuzione dei tentativi stabilito, in particolare negli ultimi cicli. Ad esempio, se si riceve un errore di rete è possibile che un tentativo termini prima della scadenza del tempo di riesecuzione dei tentativi. Se i primi tentativi hanno esito negativo a causa di un errore di rete, sarebbe disponibile ulteriore tempo per il quarto ciclo e forse per quelli successivi.

Un'altra causa di esito negativo di un tentativo è un'istanza del server non attiva, come si verifica quando un'istanza del server è impegnata nel failover del relativo database. In questo caso, viene imposto un ritardo nella riesecuzione dei tentativi per impedire ai client di causare l'overload dei partner con una successione rapida di tentativi di connessione.

[!NOTA]

Quando entrambi i nomi partner sono disponibili, se il periodo di timeout di accesso è infinito, il client tenta di riconnettersi ai server all'infinito, alternando tra il nome partner iniziale e il nome partner di failover.

Ritardi di riesecuzione dei tentativi durante il failover

Se un client tenta di connettersi a un partner durante il failover, il partner risponde immediatamente che non è attivo. In questo caso, ogni ciclo di tentativi di connessione è molto più breve del tempo di riesecuzione stabilito. Potranno pertanto essere eseguiti molti cicli di tentativi di connessione prima del timeout del periodo di accesso. Per evitare l'overload dei partner con una serie rapida di tentativi di connessione durante un failover, il provider di accesso ai dati aggiunge un breve ritardo dopo ogni ciclo di riesecuzione dei tentativi. La durata di tale ritardo è determinata dall'algoritmo di ritardo dei tentativi. Dopo il primo ciclo, il ritardo è di 100 millisecondi. Dopo ognuno dei tre cicli successivi, il ritardo raddoppia (200, 400 e 800). Per tutti i cicli successivi, il ritardo dei tentativi è di 1 secondo fino alla riuscita o al timeout del tentativo di connessione.

[!NOTA]

Se l'istanza del server viene interrotta, la richiesta di connessione ha immediatamente esito negativo.

Nella figura seguente viene illustrato il modo in cui il ritardo dei tentativi influisca sui tentativi di connessione durante un failover manuale in cui i partner cambiano di ruolo. Il periodo di timeout di accesso è 15 secondi.

Algoritmo di ritardo dei tentativi di riesecuzione