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.
Ich habe zwei VMs mit jeweils 8 Kernen und 17 GB RAM, die SQL Server zugewiesen sind.
Wir haben ein Skript geschrieben, um einigermaßen gute Schreib-E / A zu generieren (in 20 Threads).
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 synchronous
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).
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:
- Weiß jemand, wie der
redo
Prozess genau abläuft?- ist es zwischengespeichert?
- Ist der Pufferpool überhaupt beteiligt?
Verwendet der sekundäre Protokollpool, um die Protokolleinträge für das Wiederherstellen zwischenzuspeichern?
Wie groß ist der Protokollpool? Kann es bis zum maximal verfügbaren Speicher wachsen?
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.
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.
Antworten:
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.
quelle