Wiederherstellungszeiteffekte von Verfügbarkeitsgruppen


7

Wir haben verschiedene Arten von Basistests durchgeführt und AlwaysOn hat viele Tests bestanden. Wir haben endlich einen schweren Schreibtest für AlwaysOn durchgeführt, der überraschende Ergebnisse lieferte.

Die eigentlichen Testdetails finden Sie hier. Ziel ist es, festzustellen, ob die AlwaysOn-Verfügbarkeitsgruppe eine hohe Schreiblast aufnehmen kann.

  1. Ich habe zwei VMs mit jeweils 8 Kernen und 17 GB RAM, die SQL Server zugewiesen sind.

  2. Wir haben ein Skript geschrieben, um einigermaßen gute Schreib-E / A zu generieren (in 20 Threads).

  3. Jeder Thread fügt grundsätzlich 24 MB Daten in eine Tabelle ein und löscht sie in einer Endlosschleife.

Innerhalb von 15 Minuten nach dem Testlauf erreichte die Schätzung der Wiederherstellungszeit beim automatischen Failover 12 Minuten, was ziemlich schlecht ist. Wir haben ein Failover versucht, um zu bestätigen, ob es wirklich 12 Minuten dauert. Es hat ungefähr 5 Minuten gedauert, was immer noch zu hoch ist. Auch wenn wir den Test für eine dreistündige Wiederherstellung fortsetzen, beträgt die ETA fast drei Stunden und die Wiederherstellung bei einem Failover dauert Stunden (dies sollte natürlich nicht der Fall sein, wenn es sich um ein Cluster-Failover handelt, da alle Transaktionen festgeschriebene Transaktionen sind).

Also ein paar Dinge ..

Es ist sehr klar, dass das synchronoussekundäre Replikat nicht mit der Last Schritt halten kann, die das primäre Replikat generiert (obwohl beide Computer dieselbe Konfiguration haben). Und der Nebeneffekt davon ist, dass die Anmeldeprimärdaten weiter wachsen (selbst wenn wir Protokollsicherungen durchführen, kann das Protokoll nicht abgeschnitten werden).

Wir wissen, dass der sekundäre Thread einen Thread pro 4 CPU-Kerne verwendet, um das Wiederherstellen durchzuführen, was wie eine klare Einschränkung aussieht. Wenn auf der Primärseite 100 Threads ausgeführt werden, um eine Last zu generieren, kann die Sekundärseite ohnehin nicht so viele Threads verwenden.

Darüber hinaus führt der Primärserver alle Transaktionen im Arbeitsspeicher aus und überlässt das Schreiben der eigentlichen Datendatei an Prüfpunkten. Es scheint jedoch, dass Secondary alle Transaktionen vom physischen Protokolllaufwerk lesen und wiederholen muss. Der Protokollpool auf sekundär, der diesen Prozess beschleunigen soll? Aber in diesem Szenario macht es keinen guten Job.

Zum Schluss noch Fragen an AlwaysOn-Experten:

  1. Weiß jemand, wie der redoProzess genau abläuft?
    • ist es zwischengespeichert?
    • Ist der Pufferpool überhaupt beteiligt?
  2. Verwendet der sekundäre Protokollpool, um die Protokolleinträge für das Wiederherstellen zwischenzuspeichern?

  3. Wie groß ist der Protokollpool? Kann es bis zum maximal verfügbaren Speicher wachsen?

  4. Wenn das Wiederherstellen stattfindet, liest der Wiederherstellungs-Thread die Seiten, um den Pool zu puffern, und verwaltet sie, als ob es sich um eine normale Transaktion handelt.

  5. Wenn Secondary nicht mithalten kann, warum sagen AlwaysOn-Artikel, dass die Wiederherstellungszeit einige Sekunden beträgt?

Dies macht den Hochverfügbarkeitsteil der Verfügbarkeitsgruppen fraglich, da diese Wiederherstellungszeiten nicht nachhaltig sind.


[Bearbeiten durch den Fragesteller] Erläuterungen: Da die Leute zu glauben scheinen, dass dies beantwortet wird, werden die Transaktionen auf der Primärseite tatsächlich bestätigt (dh das Protokoll ist gehärtet), da der Status der Sekundärseite immer "synchronisiert" ist. Es ist also kein Problem mit dem Härten des Protokolls. Es ist also der Wiederherstellungsprozess, der beim Failover ewig dauert. Dies bedeutet, dass die Wiederherstellung von AlwaysOn immer länger dauert als ohne sie für jede Last, die die Kapazität von log> redo threads generiert.


Haben Sie Wartestatistiken von der sekundären und eine nebeneinander angeordnete E / A-Statistik (OS Physical, SQL) zwischen Primär- und Replikat (en)?
Remus Rusanu

Ich tue, es gibt nicht so viele HADR_COMMIT_SYNC-Wartezeiten (die Wiederherstellungswarteschlange wird ohnehin erst erstellt, nachdem das Protokoll gehärtet wurde), und ich habe erwähnt, dass die Transaktionen auf der Primärseite rechtzeitig festgeschrieben werden, sodass keine Frage der Protokollhärtung vorliegt. .
WrinkleFree

Verwenden Sie ein vollständiges Wiederherstellungsmodell? Wie groß sind Ihre Datenbanken? Wie oft sichern Sie das Transaktionsprotokoll?
Aen Sidhe

Ich habe im vergangenen Jahr an einer Panel-Sitzung für SQL Server 2016-Early-Adopters auf dem PASS Summit teilgenommen, bei der angegeben wurde, dass die Übertragung zwischen Replikaten aufgrund eines Abschnitts der Codebasis, der die verschlüsselt, implizit auf 45 MB (ja, MegaBYTES) pro Sekunde begrenzt ist Übertragung Ihres Protokolls an andere Replikate. Sie sagten, dass 2016 dieses Verhalten beseitigt hat. Vielleicht kann 2016 mit Ihrer Testarbeitsbelastung Schritt halten.
Swasheck

Antworten:


7

Es ist sehr klar, dass das synchrone sekundäre Replikat nicht mit der Last Schritt halten kann, die das primäre Replikat generiert (obwohl beide Computer dieselbe Konfiguration haben). Und der Nebeneffekt davon ist, dass die Anmeldeprimärdaten weiter wachsen (selbst wenn wir Protokollsicherungen durchführen, kann das Protokoll nicht abgeschnitten werden).

Bei der synchronen Spiegelung / alwayson muss der Sekundärteilnehmer bestätigen, dass er das Protokoll gehärtet (auf die Festplatte geschrieben) hat, bevor das Festschreiben des Primärteils fortgesetzt werden kann. Der primäre kann dann sein eigenes Protokoll nach Bedarf abschneiden / wiederverwenden. Wenn Sie die primäre nicht abschneiden können, bedeutet dies, dass die sekundäre nicht synchronisiert ist. Dies würde auf ein Problem mit der Möglichkeit hinweisen, das Protokoll an die sekundäre zu senden und auf die Festplatte zu schreiben. Die beiden offensichtlichen Engpässe wären die Netzwerkgeschwindigkeit und der Speicher der Protokolldatei des Sekundärs. Beide sind einfach zu messen und zu diagnostizieren, da es sich um einfache USE- Metriken (Auslastung, Sättigung, Fehler) auf Betriebssystemebene handelt.

Beachten Sie, dass ich die Wiederherstellung nie erwähnt habe (Wiederholung der Sekundarstufe). Wenn das Problem tatsächlich darin besteht, dass die Sekundärseite nicht synchronisieren kann, spielt das Wiederherstellen hier keine wirkliche Rolle.


Ja, ich hatte den gleichen Gedanken, aber aus irgendeinem Grund kann ich das Protokoll nicht über das letzte erneuerte lsn hinaus anstelle des letzten gehärteten lsn abschneiden (ich habe dies überprüft, wenn die Redo-Warteschlange groß ist, das Protokoll nicht Abschneiden (dies geschieht ungefähr mit einer Rate, die ungefähr dem Wiederherstellen entspricht)), ich habe keine geeignete Theorie gefunden (möglicherweise, weil sich beim Abschneiden des Protokolls die Protokollgröße ändert, sodass es nicht möglich ist, Protokolle unterschiedlicher Größe auf dem Protokoll zu haben primär und sekundär)
WrinkleFree

ist der Zustand 'synchronisiert' oder 'synchronisiert'?
Remus Rusanu

Es ist immer synchronisiert ..
WrinkleFree

@Rohan: Bearbeiten Sie keine Antworten zur Klarstellung. Sie können Ihre Frage jederzeit bearbeiten und weitere relevante Informationen hinzufügen.
Ypercubeᵀᴹ

@ypercube: Entschuldigung, danke für die Bearbeitung :)
WrinkleFree
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.