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.