Beeinträchtigt das Ausführen einer großen Abfrage für eine sekundäre Datenbank in einer Verfügbarkeitsgruppe die Transaktionsleistung in der primären Datenbank?

17

Ich muss Echtzeitdaten oder nahezu Echtzeitdaten für SSRS- und Tableau-Berichte bereitstellen. Ich möchte nicht, dass das Produktions-OLTP-System durch lange laufende Abfragen beeinträchtigt wird. Beeinträchtigt das Ausführen einer großen Abfrage für eine sekundäre Datenbank in einer Verfügbarkeitsgruppe die Transaktionsleistung in der primären Datenbank?

Tarzan
quelle

Antworten:

14

Beeinträchtigt das Ausführen einer großen Abfrage für eine sekundäre Datenbank in einer Verfügbarkeitsgruppe die Transaktionsleistung in der primären Datenbank?

Dies hängt vom Synchronisierungsmodus ab, den Sie beim Konfigurieren der Verfügbarkeitsgruppe verwendet haben - Synchronisieren oder Asynchronisieren!

Auf Secondary Replik , alle Transaktionen verwenden Snapshot Isolation Ebene NUR und alle Sperrhinweise werden ebenfalls ignoriert. Aus diesem Grund ist es wichtig, Ihre Arbeitsbelastung zu testen, wenn Sie AlwaysON nutzen.

Von: Minimieren der Blockierung des REDO-Threads beim Ausführen der Berichtsauslastung auf Secondary Replica

Während das Zuordnen der Berichts-Workload zur Snapshot-Isolation das Blockieren zwischen der DML-Workload, die vom REDO-Thread auf dem sekundären Replikat angewendet wird, und der Lese- oder Berichts-Workload beseitigt, wird das potenzielle Blockieren des REDO-Threads beim Ausführen einer DDL-Operation nicht beseitigt .

Bei Verwendung von

  • Synchroner Modus

    • Das Blockieren von Problemen auf Ihrem sekundären Replikat wirkt sich auf die Leistung Ihrer Abfragen auf dem primären Replikat aus. Eine auf dem sekundären Server ausgeführte Lese-Workload (select) hat möglicherweise den Redo-Thread daran gehindert, die Änderungen anzuwenden, die vom primären Replikat stammen. Dies bedeutet, dass das primäre Replikat warten muss, bis Änderungen auf alle sekundären SYNC-Replikate angewendet wurden, bevor es lokal festgeschrieben wird und möglicherweise Zeitüberschreitungen oder Blockierungen oder Deadlocks aufweist.

      Der REDO-Thread ist auf dem Readable Secondary als DB STARTUPBefehl in zu sehen sys.dm_exec_requests. Wenn dieser Thread blockiert wird, kann sich Ihre Lese-Workload auf dem sekundären Thread auf den primären auswirken.

      Weitere Informationen finden Sie in Szenario 1: REDO wurde aufgrund einer großen Abfrage im sekundären Replikat blockiert

  • Asynchroner Modus

    • Die primäre wartet nicht auf die Bestätigung von der sekundären. Ein Blockierungsproblem auf der Sekundärseite wird nur auf die Sekundärseite beschränkt, wobei die Redo-Warteschlange auf der Sekundärseite wächst, bis die Sperren aufgehoben sind und der Redo-Thread die Protokollblöcke anwenden kann. Dies hat keine Auswirkungen auf das primäre Replikat.

Ihre Definition von "Echtzeit oder fast Echtzeit" erfordert mehr Überlegungen unter Berücksichtigung der verwendeten Synchronisierungsmethode, der Netzwerklatenz und der Auslastung des primären Replikats sowie der Protokollaktivität, die sekundär transportiert werden muss.

SQL Server 2016 hat einige wichtige Verbesserungen im AlwaysON-Bereich vorgenommen, z

Kin Shah
quelle
2
Ein blockierter REDO-Thread hat keinen Einfluss auf die "Leistung Ihrer Abfragen im primären Replikat". E / A-Konflikte auf der Sekundärseite können das Speichern der Protokollsätze auf der Sekundärseite verzögern, was sich auf die Festschreibungszeiten auf der Primärseite auswirken kann. Dies hat jedoch nichts mit dem REDO-Thread zu tun. Der Primärserver wartet nicht darauf, dass REDO die Änderung anwendet. nur damit es in die Logdatei geschrieben wird. Siehe blogs.msdn.microsoft.com/sqlserverstorageengine/2011/12/22/…
David Browne - Microsoft