Verbessern der allgemeinen Replikationsleistung

Gilt für:SQL ServerAzure SQL Managed Instance

Wenn Sie die Hinweise in diesem Thema beachten, können Sie die allgemeine Leistung aller Replikationstypen in der Anwendung und im Netzwerk verbessern.

Server und Netzwerk

  • Legen Sie das Minimum und das Maximum für den Arbeitsspeicher fest, der Microsoft SQL Server-Datenbankmodul zugeordnet ist.

    Standardmäßig ändert Datenbank-Engine die Arbeitsspeicheranforderungen auf der Grundlage der verfügbaren Systemressourcen dynamisch. Wenn verhindert werden soll, dass während Replikationsaktivitäten nur wenig Arbeitsspeicher zur Verfügung steht, verwenden Sie die Option Min. Serverarbeitsspeicher zum Festlegen des Minimums an Arbeitsspeicher. Um zu verhindern, dass das Betriebssystem Speicher auf den Datenträger auslagern muss, können Sie mit der Option max server memory auch eine maximale Speichermenge festlegen. Weitere Informationen finden Sie unter Konfigurationsoptionen für den Serverarbeitsspeicher.

  • Stellen Sie eine ordnungsgemäße Zuordnung der Datenbankdateien und Protokolldateien sicher. Verwenden Sie ein separates Laufwerk für das Transaktionsprotokoll für alle an der Replikation beteiligten Datenbanken.

    Sie können die Zeit verringern, die zum Schreiben von Transaktionen benötigt wird, indem Sie die Protokolldateien auf ein anderes Laufwerk schreiben als das, das zum Speichern der Datenbank verwendet wird. Dieses Laufwerk kann mithilfe eines RAID 1-Gerätes (Redundant Array of Inexpensive Disks) gespiegelt werden, wenn Fehlertoleranz erforderlich ist. Verwenden Sie RAID 0 oder 0+1 (je nach Bedarf an Fehlertoleranz) für andere Datenbankdateien. Dies ist eine bewährte Praxis, unabhängig davon, ob Replikation verwendet wird oder nicht.

  • Fügen Sie gegebenenfalls Arbeitsspeicher für die Server hinzu, die für die Replikation verwendet werden, insbesondere für den Verteiler.

  • Verwenden Sie Computer mit mehreren Prozessoren.

    Replikations-Agents können von weiteren Prozessoren auf dem Server profitieren. Bei hoher CPU-Nutzung sollten Sie die Installation einer schnelleren CPU oder mehrerer CPUs in Betracht ziehen.

  • Verwenden Sie ein schnelles Netzwerk.

    Das Netzwerk kann besonders bei der Transaktionsreplikation einen erheblichen Leistungsengpass darstellen. Die Weitergabe von Änderungen an den Abonnenten kann deutlich beschleunigt werden, wenn Sie ein sehr schnelles Netzwerk mit 100 MBit/s oder mehr verwenden. Geben Sie bei einem langsamen Netzwerk geeignete Netzwerkeinstellungen und Agentparameter an.

Datenbankentwurf

  • Beachten Sie die bewährten Methoden für den Datenbankentwurf.

    Eine Leistungsoptimierung wirkt sich auf eine replizierte Datenbank genauso vorteilhaft aus wie auf eine nicht replizierte Datenbank. Indizes sind auf dem Abonnenten jedoch mit Bedacht zu verwenden: die Primärschlüsselspalte auf dem Abonnenten sollte indiziert werden, doch weitere Indizes können sich auf die Leistung beim Einfügen, Aktualisieren und Löschen auswirken.

  • Erwägen Sie, die Datenbankoption READ_COMMITTED_SNAPSHOT festzulegen.

    Um Konflikte zwischen der Benutzeraktivität und der Aktivität des Replikations-Agents besser vermeiden zu können, legen Sie diese Option für die Veröffentlichungs- und Abonnementdatenbanken fest:

    ALTER DATABASE AdventureWorks  
    SET READ_COMMITTED_SNAPSHOT ON  
    

    Weitere Informationen finden Sie unter ALTER DATABASE (Transact-SQL).

  • Gehen Sie bei der Anwendungslogik in Triggern mit Bedacht vor.

    Die Geschäftslogik in benutzerdefinierten Triggern auf dem Abonnenten kann die Replikation von Änderungen an den Abonnenten verlangsamen.

    Wenn Sie zur Wahrung der referenziellen Integrität Trigger in Tabellen verwenden, die für die Mergereplikation veröffentlicht werden, geben Sie die Verarbeitungsreihenfolge der Tabellen an. Auf diese Weise reduzieren Sie die Zahl der Wiederholungsversuche für den Merge-Agent. Weitere Informationen finden Sie unter Specify merge replication options (Festlegen von Mergereplikationsoptionen).

  • Schränken Sie die Verwendung des LOB-Datentyps (Large OBjects) ein.

    LOBs beanspruchen mehr Speicherplatz und Verarbeitungszeit als andere Spaltendatentypen. Schließen Sie diese Spalten nicht in Artikel ein, es sei denn, sie sind für Ihre Anwendung erforderlich. Die Datentypen text, ntextund image sind als veraltet markiert. Wenn Sie LOBs verwenden, sollten Sie auf die Datentypen varchar(max), nvarchar(max)und varbinary(max)zurückgreifen.

    Ziehen Sie für die Transaktionsreplikation das Verteilungs-Agentprofil mit der Bezeichnung Verteilungsprofil für das OLE DB-Streaming in Betracht. Weitere Informationen finden Sie unter Replication Agent Profiles.

Veröffentlichungsentwurf

  • Veröffentlichen Sie nur die erforderlichen Daten.

    Da die Replikation problemlos eingerichtet werden kann, gibt es eine Tendenz, mehr Daten zu veröffentlichen, als tatsächlich erforderlich sind. Dies kann zusätzliche Ressourcen in den Verteilungsdatenbanken und Snapshotdateien beanspruchen und den Durchsatz für erforderliche Daten verringern. Sie sollten vermeiden, nicht benötigte Tabellen zu veröffentlichen, und in Betracht ziehen, Veröffentlichungen weniger häufig zu aktualisieren.

  • Minimieren Sie Konflikte über den Veröffentlichungsentwurf und das Anwendungsverhalten.

    Die folgenden Replikationstypen lassen Datenänderungen auf Abonnenten zu: Mergereplikation, Transaktionsreplikation mit aktualisierbaren Abonnements und Peer-zu-Peer-Transaktionsreplikation. Die Mergereplikation und die Transaktionsreplikation mit aktualisierbaren Abonnements unterstützen Datenkonflikte, wenn eine bestimmte Zeile zwischen Synchronisierungen in mehreren Knoten aktualisiert wird. Die Peer-zu-Peer-Replikation unterstützt keine Datenkonflikte; Datenänderungen müssen partitioniert werden. Unabhängig vom Typ der verwendeten Replikation wird empfohlen, Änderungen möglichst zu partitionieren, da dies den Verarbeitungsaufwand bei der Konflikterkennung und -lösung reduziert.

    Änderungen können partitioniert werden, indem Teilmengen von Daten an jeden Subscriber veröffentlicht werden oder indem eine Anwendung Änderungen für eine bestimmte Zeile an einen bestimmten Knoten weiterleitet:

    • Die Mergereplikation unterstützt die Veröffentlichung von Teilmengen von Daten mithilfe parametrisierter Filter mit nur einer Veröffentlichung. Weitere Informationen zu parametrisierten Zeilenfiltern finden Sie unter Parametrisierte Zeilenfilter.

    • Die Transaktionsreplikation unterstützt das Veröffentlichen von Teilmengen von Daten mithilfe statischer Filter in mehreren Publikationen. Weitere Informationen finden Sie unter Filtern von veröffentlichten Daten.

  • Verwenden Sie Zeilenfilter mit Umsicht.

    Enthält eine Transaktionsveröffentlichung einen oder mehrere Artikel mit Zeilenfiltern, muss der Protokolllese-Agent beim Scannen des Transaktionsprotokolls die Filter auf jede Zeile anwenden, die von einem Update der Tabelle betroffen sind. Das wirkt sich auf den Durchsatz des Protokolllese-Agents aus.

    In ähnlicher Form muss die Mergereplikation geänderte oder gelöschte Zeilen auswerten, um die Abonnenten zu ermitteln, die diese Zeilen erhalten sollten. Wenn Zeilenfilter eingesetzt werden, um die beim Abonnenten benötigten Daten zu reduzieren, ist die Verarbeitung komplexer und kann langsamer sein, als wenn Sie alle Zeilen einer Tabelle veröffentlichen. Wägen Sie die Vor- und Nachteile zwischen geringeren Speicherplatzanforderungen auf jedem Abonnenten und der Notwendigkeit eines maximalen Durchsatzes sorgfältig ab. Weitere Informationen zur Filterung finden Sie unter Filtern von veröffentlichten Daten.

Überlegungen zu Abonnements

  • Verwenden Sie Pullabonnements, wenn sehr viele Abonnenten vorhanden sind.

    Der Verteilungs-Agent oder der Merge-Agent wird auf dem Verteiler für Pushabonnements und auf dem Abonnenten für Pullabonnements ausgeführt. Die Verwendung von Pull-Abonnements kann die Leistung verbessern, indem die Agentverarbeitung vom Distributor zu den Abonnenten verlagert wird. Weitere Informationen finden Sie unter Abonnieren von Veröffentlichungen.

  • Ziehen Sie für entfernte Abonnenten mit höherer Netzwerklatenz die Verwendung von Pullabonnements in Betracht.

    • Bei einem Pushabonnement wird der Verteilungs-Agent auf dem Vertriebspartner ausgeführt und verwendet zwei Puffer zum Lesen und Schreiben von Daten. Sobald beide Puffer voll sind, muss der Agent auf die Bestätigung eines Netzwerk-Roundtrips warten, bevor weitere Daten gesendet werden, wodurch Leerlaufzeit entsteht, die mit zunehmender Latenz zunehmen kann.

    • Bei einem Pullabonnement wird die Verteilungs-Agent auf dem Abonnenten ausgeführt, sodass Schreibvorgänge lokal angewendet werden und Puffer schnell freigegeben werden. Dieser Prozess ermöglicht kontinuierliche Lesevorgänge aus der Verteilungsdatenbank mit deutlich besserem Durchsatz, wenn die Latenz hoch ist.

  • Initialisieren Sie gegebenenfalls das Abonnement erneut, wenn Abonnenten zu stark in Verzug geraten sind.

    Wenn große Mengen an Änderungen an die Abonnenten übertragen werden müssen, kann eine Neuinitialisierung mit einer neuen Momentaufnahme schneller sein, als die Replikation zur Übertragung der einzelnen Änderungen zu verwenden. Weitere Informationen finden Sie unter Erneutes Initialisieren von Abonnements.

    Bei der Transaktionsreplikation zeigt der Replikationsmonitor folgende Informationen auf der Registerkarte Nicht verteilte Befehle an: die Anzahl der Transaktionen in der Verteilungsdatenbank, die noch nicht an einen Abonnenten verteilt wurden; und die geschätzte Zeit für das Verteilen dieser Transaktionen. Weitere Informationen finden Sie unter View information and perform tasks using Replication Monitor (Anzeigen von Informationen und Ausführen von Aufgaben mit dem Replikationsmonitor).

Überlegungen zu Momentaufnahmen

  • Führen Sie den Momentaufnahme-Agent nur bei Bedarf und außerhalb der Spitzenzeiten aus.

    Der Momentaufnahme-Agent führt Massenkopieraktionen von Daten aus der veröffentlichten Tabelle auf dem Verleger in eine Datei im Momentaufnahmeordner auf dem Verteiler durch. Das Generieren einer Momentaufnahme kann die Ressourcen stark beanspruchen und sollte möglichst außerhalb der Spitzenzeiten stattfinden.

  • Verwenden Sie eine Momentaufnahme im nativen Modus, sofern nicht eine Momentaufnahme im Zeichenmodus erforderlich ist.

    Verwenden Sie für alle Abonnenten die standardmäßige Momentaufnahme im nativen Modus, mit Ausnahme von Nicht-SQL-Server-Abonnenten und Abonnenten, auf denen SQL Server Compact ausgeführt wird, die eine Momentaufnahme im Zeichenmodus erfordern.

  • Verwenden Sie für eine Publikation einen einzelnen Snapshot-Ordner.

    Beim Angeben der Veröffentlichungseigenschaften im Zusammenhang mit dem Momentaufnahmespeicherort stehen Optionen zur Auswahl, um Momentaufnahmedateien im Standardmomentaufnahmeordner, in einem alternativen Momentaufnahmeordner oder in beiden zu erstellen. Das Erstellen von Momentaufnahmedateien an beiden Speicherorten erfordert zusätzlichen Datenträgerspeicher und mehr Verarbeitungsaufwand, wenn der Snapshot-Agent ausgeführt wird.

  • Speichern Sie den Momentaufnahmeordner auf einem lokalen Laufwerk des Verteilers, das nicht zum Speichern von Datenbank- oder Protokolldateien verwendet wird.

    Der Snapshot-Agent schreibt Daten sequenziell in den Snapshot-Ordner. Das Speichern des Snapshotordners auf einem separaten Laufwerk, getrennt von allen Datenbank- oder Protokolldateien, verringert die Konkurrenz zwischen den Datenträgern und trägt dazu bei, dass der Snapshotprozess schneller abgeschlossen wird.

  • Wenn Sie die Abonnementdatenbank auf dem Abonnenten erstellen, sollten Sie das einfache oder das massenprotokollierte Wiederherstellungsmodell angeben. Dadurch werden die Masseneinfügungen während der Anwendung der Momentaufnahme auf dem Abonnenten nur in geringem Umfang protokolliert. Nachdem die Momentaufnahme auf die Abonnementdatenbank angewendet wurde, können Sie gegebenenfalls wieder zu einem anderen Wiederherstellungsmodell wechseln (replizierte Datenbanken unterstützen jedes Wiederherstellungsmodell). Weitere Informationen zum Auswählen eines Wiederherstellungsmodells finden Sie unter Übersicht über Wiederherstellungsvorgänge (SQL Server).

  • Erwägen Sie in Netzwerken mit geringer Bandbreite die Verwendung des alternativen Snapshotordners und komprimierter Snapshots auf Wechselmedien.

    Das Komprimieren von Momentaufnahmedateien im alternativen Momentaufnahmeordner kann den Speicherplatzbedarf von Momentaufnahmen reduzieren und das Übertragen der Momentaufnahmedateien auf Wechselmedien vereinfachen.

    Komprimierte Momentaufnahmen können in einigen Fällen die Leistung beim Übertragen der Momentaufnahmedateien im Netzwerk verbessern. Beim Komprimieren der Momentaufnahme fällt jedoch zusätzlicher Verarbeitungsaufwand für den Momentaufnahme-Agent an, wenn die Momentaufnahmedateien erstellt werden, sowie für den Verteilungs-Agent oder den Merge-Agent, wenn die Momentaufnahmedateien angewendet werden. Dies könnte das Erstellen von Momentaufnahmen verlangsamen und den Zeitaufwand für das Anwenden einer Momentaufnahme in manchen Fällen erhöhen. Darüber hinaus kann das Übertragen komprimierter Momentaufnahmen bei einem Netzwerkausfall nicht wieder aufgenommen werden, weshalb sie sich nicht für unzuverlässige Netzwerke eignen. Wägen Sie die Vor- und Nachteile sorgfältig ab, wenn Sie komprimierte Momentaufnahmen in einem Netzwerk verwenden. Weitere Informationen finden Sie unter Ändern von Momentaufnahmeoptionen.

  • Initialisieren Sie ein Abonnement gegebenenfalls manuell.

    In einigen Szenarien, wenn z. B. große Anfangsdatasets eine Rolle spielen, ist es vorteilhafter, ein Abonnement statt mit einer Momentaufnahme mit einer anderen Methode zu initialisieren. Weitere Informationen finden Sie unter Initialisieren eines Transaktionsabonnements ohne Snapshot.

Parameter des Agenten

  • Reduzieren Sie den Ausführlichkeitsgrad der Replikationsagenten, außer bei anfänglichen Tests, der Überwachung oder der Fehlersuche.

    Reduzieren Sie den –HistoryVerboseLevel -Parameter und den –OutputVerboseLevel -Parameter der Verteilungs-Agents oder Merge-Agents. Dadurch wird die Anzahl der neuen Zeilen reduziert, die zum Nachverfolgen des Verlaufs und der Ausgabe von Agents eingefügt werden. Stattdessen werden frühere Verlaufsmeldungen mit dem gleichen Status auf die neuen Verlaufsinformationen aktualisiert. Erhöhen Sie die Ausführlichkeitsstufen beim Testen, Überwachen und Debuggen, sodass Sie möglichst viele Informationen über die Agentenaktivität erhalten.

  • Verwenden Sie den –MaxBCPThreads -Parameter des Momentaufnahme-Agents, Merge-Agents und Verteilungs-Agents (die Anzahl der angegebenen Threads sollte die Anzahl der Prozessoren des Computers nicht überschreiten). Mit diesem Parameter wird die Anzahl der Massenkopieroperationen angegeben, die während der Erstellung und Anwendung der Momentaufnahme parallel ausgeführt werden können.

  • Verwenden Sie den –UseInprocLoader -Parameter des Verteilungs-Agents und des Merge-Agents (dieser Parameter kann nicht verwendet werden, wenn veröffentlichte Tabellen XML-Spalten enthalten). Dieser Parameter bewirkt, dass der Agent den Befehl BULK INSERT verwendet, wenn der Snapshot angewendet wird.

Agentparameter können in den Agentprofilen und in der Befehlszeile angegeben werden. Weitere Informationen finden Sie unter: