Freigeben über


Algorithmus für zu wiederholende Verbindungsversuche (für TCP/IP-Verbindungen)

Wenn auf dem Client Microsoft Windows XP oder später ausgeführt wird, verwendet der Datenzugriffsanbieter bei einer TCP/IP-Verbindung, wenn beide Partnernamen sich im Cache befinden, einen Algorithmus für zu wiederholende Verbindungsversuche. Dies gilt sowohl beim Herstellen der ersten Verbindung mit der Sitzung als auch beim erneuten Herstellen der Verbindung, nachdem eine bereits hergestellte Verbindung verloren ging. Sobald eine Verbindung geöffnet wurde, wird zum Ausführen der vor der Anmeldung und während der Anmeldung erforderlichen Schritte zusätzliche Zeit benötigt.

HinweisHinweis

Der zum Öffnen einer Verbindung erforderliche Zeitaufwand kann aufgrund von externen Faktoren, wie z. B. langsame DNS-Lookups, langsamer Domänencontroller oder langsames Kerberos-Schlüsselverteilungscenter (KDC), Zeitaufwand für die Kontaktherstellung mit dem SQL Server-Browser, Netzwerküberlastung usw., höher als die Wiederholungszeit sein. Solche externen Faktoren können verhindern, dass ein Client eine Verbindung mit einer gespiegelten Datenbank herstellen kann. Aufgrund externer Faktoren kann es auch vorkommen, dass eine Verbindung nicht innerhalb der zugeteilten Wiederholungszeit geöffnet werden kann. Informationen, wie Sie bei Verbindungsversuchen zum ersten Partner DNS und den SQL Server-Browser umgehen können, finden Sie unter Herstellen der Anfangsverbindung mit einer Datenbank-Spiegelungssitzung.

Wenn ein Verbindungsversuch fehlschlägt oder die Wiederholungszeit abläuft, bevor eine Verbindung hergestellt werden kann, versucht der Datenzugriffsanbieter, eine Verbindung zu dem anderen Partner herzustellen. Wenn bis zu diesem Punkt noch keine Verbindung geöffnet wurde, versucht der Anbieter abwechselnd mit den Namen des ersten Partners und dem Namen des Failoverpartners eine Verbindung herzustellen, solange bis dies gelingt oder bis ein Anmeldungstimeout auftritt. Der Standardtimeoutwert für den Anmeldungszeitraum beträgt 15 Sekunden. Es wird empfohlen, den Anmeldungstimeout auf mindestens 5 Sekunden festzulegen. Bei einem kürzeren Timeoutwert können Verbindungen u. U. nicht mehr erfolgreich hergestellt werden.

Die Wiederholungszeit ist ein Prozentsatz des Anmeldungszeitraums. Die Wiederholungszeit für einen Verbindungsversuch verlängert sich mit jeder Folgerunde. In der ersten Runde beträgt die Wiederholungszeit für jeden der zwei Versuche 8 Prozent des gesamten Anmeldungszeitraums. In jeder Folgerunde erhöht der Wiederholungsalgorithmus die maximale Wiederholungszeit um denselben Faktor. Die Wiederholungszeiten für die ersten acht Verbindungsversuche bemessen sich daher wie folgt:

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

Die Wiederholungszeit wird mit der folgenden Formel berechnet:

Wiederholungszeit**=Vorhergehende Wiederholungszeit+(** 0,08 *Anmeldungstimeout)

Hierbei gilt für Vorhergehende Wiederholungszeit ein Anfangswert von 0.

Bei Verwendung des Standardwerts für den Anmeldungstimeout von 15 Sekunden gilt Anmeldungstimeout = 15. In diesem Fall berechnen sich die Wiederholungszeiten in den ersten drei Runden wie folgt:

Runde

Berechnung der Wiederholungszeit

Wiederholungszeit pro Versuch

1

0 +(0.08 * 15)

1,2 Sekunden

2

1.2 +(0.08 * 15)

2,4 Sekunden

3

2.4 +(0.08 * 15)

3,6 Sekunden

4

3.6 +(0.08 * 15)

4,8 Sekunden

In der folgenden Abbildung werden diese Wiederholungszeiten für aufeinander folgende Wiederholungsversuche, für die jeweils ein Timeout erfolgt, veranschaulicht.

Maximale Wiederholungsverzögerungen für ein 15 sekündiges Anmeldungstimeout

Bei Verwendung des Standardtimeoutwerts für den Anmeldungszeitraum werden für die ersten drei Runden von Verbindungsversuchen maximal 14,4 Sekunden zugeteilt. Würde bei jedem Versuch die gesamte dafür zugeteilte Zeit aufgebraucht, wären nur noch 0,6 Sekunden übrig, bevor der Anmeldungszeitraum abläuft. In diesem Fall würde die vierte Runde zeitlich beschnitten, sodass für die Verbindungsherstellung unter Verwendung des ersten Partnernamens nur noch ein letzter, kurzer Versuch möglich wäre. Ein Verbindungsversuch kann aber, besonders in nachfolgenden Runden, auch schon vor Ablauf der jeweils zugeteilten Wiederholungszeit fehlschlagen. So würde z. B. bei einem Netzwerkfehler ein Versuch schon vorzeitig, also vor Ablauf der Wiederholungszeit, beendet werden. Wenn frühere Versuche aufgrund eines Netzwerkfehlers fehlschlagen, dann wäre für die vierte und möglicherweise auch noch für weitere Runden zusätzlich Zeit vorhanden.

Eine weitere Ursache für einen fehlgeschlagenen Versuch ist eine nicht aktive Serverinstanz. Dies ist z. B. der Fall, wenn für die Datenbank einer Serverinstanz gerade ein Failover ausgeführt wird. In diesem Fall tritt eine Wiederholungsverzögerung ein, um zu verhindern, dass Clients die Partner mit einer raschen Folge von Verbindungsversuchen überlasten.

HinweisHinweis

Wenn beide Partnernamen verfügbar sind und für den Anmeldungszeitraum keine Zeitbegrenzung festgelegt ist, versucht der Client unbegrenzt lange, eine Verbindung zu den Servern herzustellen, wobei abwechselnd der Name des ersten Partners und der Name des Failoverpartners verwendet wird.

Wiederholungsverzögerungen während eines Failovers

Versucht ein Client, eine Verbindung mit einem Partner herzustellen, für den gerade ein Failover ausgeführt wird, antwortet der Partner sofort, dass er nicht aktiv ist. In diesem Fall ist jede Runde von Verbindungsversuchen viel kürzer als die dafür zugeteilte Wiederholungszeit. Dies bedeutet, dass viele Verbindungsversuchsrunden stattfinden können, bevor ein Timeout des Anmeldungszeitraums eintritt. Damit die Partner während eines Failovers nicht durch eine Serie von schnell aufeinander folgenden Verbindungsversuchen überlastet werden, fügt der Datenzugriffsanbieter nach jedem Wiederholungszyklus eine kurze Wiederholungsverzögerung hinzu. Die Länge dieser Wiederholungsverzögerung wird vom Wiederholungsverzögerungsalgorithmus bestimmt. Nach der ersten Runde beträgt die Verzögerung 100 Millisekunden. Nach jeder der folgenden drei Runden verdoppelt sich die Wiederholungsverzögerung auf jeweils 200, 400 und 800 Millisekunden. Bei allen nachfolgenden Runden beträgt die Wiederholungsverzögerung 1 Sekunde, bis der Verbindungsversuch erfolgreich ist oder ein Timeout auftritt.

HinweisHinweis

Wenn die Serverinstanz beendet wird, wird die Verbindungsanforderung sofort abgebrochen.

Die folgende Abbildung veranschaulicht, wie sich die Verbindungsverzögerung während eines manuellen Failovers, in dem die Partner ihre Rollen tauschen, auf Verbindungsversuche auswirkt. Der Timeoutwert für den Anmeldungszeitraum beträgt 15 Sekunden.

Wiederholungsverzögerungsalgorithmus