Grundlegendes zur Artikelverarbeitungsreihenfolge für die Zusammenführungsreplikation

In diesem Artikel wird erläutert, wie Sie die Verarbeitungsreihenfolge der Seriendruckreplikation verstehen.

Ursprüngliche Produktversion:   SQL Server
Ursprüngliche KB-Nummer:   307356

Zusammenfassung

Der Seriendruck-Agent folgt einem bestimmten Satz von Regeln, die die Reihenfolge steuern, in der der Zusammenführungsprozess Während des Synchronisierungsprozesses Änderungen an Artikeln anwendet.

In diesem Artikel wird erläutert, warum die Artikelverarbeitungsreihenfolge wichtig ist.

Weitere Informationen

Es gibt zwei Hauptgründe, warum die Artikelverarbeitungsreihenfolge wichtig ist:

  • In vielen Fällen muss der Seriendruck-Agent Änderungen an Artikeln verarbeiten, die an Deklarative Referential Integrity (DRI)-Einschränkungen beteiligt sind, in einer bestimmten Reihenfolge, um eine optimale Leistung zu erzielen. Wenn dies nicht der Fall ist, muss der Seriendruck-Agent möglicherweise Erneut versuchen, Vorgänge der Datenbearbeitungssprache (Data Manipulation Language, DML) in einer falschen Reihenfolge zu wiederholen (d. a. versuchen Sie, eine untergeordnete Zeile vor der zeile des übergeordneten Elements einzufügen).

  • Anwendungen, die Trigger zur Aufrechterhaltung der referenziellen Integrität verwenden, erfordern, dass der Seriendruck-Agent Änderungen in einer bestimmten Reihenfolge sendet. Wenn der Seriendruck-Agent Änderungen in einer falschen Reihenfolge sendet, wird der Auslöser die Änderung höchstwahrscheinlich zurücksetzen, und die Änderung wird nicht in der gesamten Replikationstopologie verteilt.

Hinweis

Der Seriendruck-Agent kann die Auswertung der FOREIGN KEY-Einschränkung und die Ausführung von Benutzerauslöser umgehen, wenn er SQL DML-Änderungsvorgänge auf ein Partnerreplikat anwendet. Damit dies geschieht, müssen die FOREIGN KEY-Einschränkung und der Benutzerauslöser oder beides mit der Option NOT FOR REPLICATION erstellt worden sein. In beiden Fällen geht der Zusammenführungsprozess davon aus, dass SQL Server die Geschäftslogik erfolgreich ausgewertet hat, wenn die ursprüngliche vom Benutzer initiierte Änderung für das Objekt ausgeführt wird, und dass diese Bedingungen nicht erneut ausgewertet werden müssen, wenn die Daten in das Partnerreplikat repliziert werden. Der Hauptvorteil der Verwendung von NOT FOR REPLICATION auf diese Weise ist eine höhere Leistung. Weitere Informationen zur Option NOT FOR REPLICATION und zur entsprechenden Verwendung finden Sie im Thema zur Option NOT FOR REPLICATION in SQL Server 2000 Books Online.

Aus den beiden zuvor aufgeführten Gründen ist die Reihenfolge wichtig, in der der Seriendruck-Agent Änderungen an einem Partnerreplikat übermittelt.

Bevor Sie mit der Erläuterung der Artikelverarbeitungsreihenfolge beginnen, ist es wichtig, sich mit zwei Hauptkonzepten vertraut zu machen. Die beiden wichtigsten Konzepte sind:

  • Ein Spitzname eines Artikels.

  • Eine Generation.

Hier ist eine Beschreibung der beiden Konzepte.

  • Artikel-Spitznamen

    Ein Spitzname ist ein ganzzahliger Wert, den der Seriendruck-Agent verwendet, um einen Artikel (eine SQL Server Tabelle) zum Zusammenführen der Replikation zu identifizieren. Der Zusammenführungssetupprozess weist einen Spitznamen für Artikel zu, wenn der Artikel einer Seriendruckpublikation hinzugefügt wird. Wenn ein Artikel an DRI-Einschränkungen beteiligt ist, versucht der Zusammenführungssetupprozess, einen Artikel-Spitznamen zu generieren, der definierte DRI-Einschränkungen widerspiegelt. Der Zusammenführungsprozess weist Tabellen, auf die durch eine FOREIGN KEY-Einschränkung (ein übergeordnetes Element) verwiesen wird, einen kleineren Artikelnamen zu als der der verweisenden Tabelle (der untergeordneten Tabelle oder der Tabelle, für die die FOREIGN KEY-Einschränkung definiert ist).

    Wenn eine Tabelle nicht an DRI-Einschränkungen beteiligt ist, weist der Zusammenführungssetupprozess den Spitznamen des Artikels basierend auf der Reihenfolge zu, in der der Artikel der Publikation hinzugefügt wird (in aufsteigender Reihenfolge).

  • Generation

Eine Generierung ist ein ganzzahliger Wert, den der Seriendruck-Agent verwendet, um eine logische Gruppe von Änderungen an einem bestimmten Artikel nachzuverfolgen. Alle Änderungen, die an einem bestimmten Artikel in einem bestimmten Replikat zwischen Zusammenführungssynchronisierungen vorgenommen wurden, sind derselben Generierung zugeordnet. Jedes Mal, wenn der Seriendruck-Agent ausgeführt wird, schließt er die vorhandene geöffnete Generation und öffnet dann eine neue Generation, der die nächste Gruppe von Änderungen zugeordnet werden soll.

Verarbeiten von INSERTs, UPDATEs und DELETEs

Der Seriendruck-Agent partitioniert die Artikel für eine bestimmte Publikation in zwei unterschiedliche Gruppen:

  • Der Seriendruck-Agent platziert Artikel, die nicht an Verknüpfungsfilterbeziehungen beteiligt sind und nicht über DRI mit Artikeln verknüpft sind, die an Verknüpfungsfiltern beteiligt sind, in einer Gruppe.

  • Der Seriendruck-Agent platziert Artikel, die explizit an Verknüpfungsfilterbeziehungen beteiligt sind, und Artikel zum Verknüpfen von Filterartikeln über DRI in eine zweite unterschiedliche Gruppe.

Der Seriendruck-Agent fügt jeden artikel, der der Publikation definiert ist, nur einer der vorherigen Gruppen hinzu.

Der Seriendruck-Agent verwendet die Gruppen, um die allgemeine Verarbeitungsreihenfolge von UPDATEs , und für alle Artikel zu INSERTs DELETEs bestimmen, die für die Publikation definiert sind.

In jeder der beiden entsprechenden Gruppen verarbeitet der Seriendruck-Agent INSERTs und UPDATEs in aufsteigender Reihenfolge der Artikel-Spitznamen und Prozesse DELETEs in absteigender Artikel-Spitznamenreihenfolge. Zunächst verarbeitet der Seriendruck-Agent alle in DELETEs ihrer Gesamtheit in einer bestimmten Gruppe, gefolgt von und UPDATEs INSERTs (auch in einer bestimmten Gruppe). Konzeptionell fügt der Seriendruck-Agent die beiden oben genannten Gruppen in der zuvor aufgeführten Reihenfolge aneinander an (nicht zusammengeführt). Der Seriendruck-Agent beginnt mit der Verarbeitung DELETEs für die erste Gruppe und erweitert dann die Verarbeitung auf die zweite DELETE Gruppe, und die restlichen Änderungen für die beiden Gruppen werden parallel verarbeitet. Obwohl der Seriendruck-Agent die Artikelverarbeitungsreihenfolge in jeder entsprechenden Gruppe verwaltet, behält der Seriendruck-Agent keine strenge Artikelverarbeitungsreihenfolge für die beiden jeweiligen Gruppen bei. Im Falle eines oder ist INSERT UPDATE es daher möglich, dass Änderungen von der ersten Gruppe mit einem höheren Spitznamen für Artikel vor denen aus der zweiten Gruppe mit einem niedrigeren Spitznamen eingehen können. Die umgekehrte Situation kann auch für eine DELETE auftreten. Beide Verhaltensweisen sind entwurfsbedingt.

Mögliche Auswirkungen der Generierung von Batchverarbeitung auf die Artikelverarbeitungsreihenfolge

Wie bereits erwähnt, können Sie mit einer Generation Änderungen ( und ) logisch INSERTs gruppieren, UPDATEs die für einen DELETEs bestimmten Artikel an einem bestimmten Replikat zwischen Synchronisierungssitzungen auftreten. Letztendlich arbeitet der Seriendruck-Agent mit Generationen zusammen, wenn er bestimmt, welche Änderungen zwischen zwei Replikaten ausgetauscht werden müssen. Der Seriendruck-Agent handelt eine gemeinsame Generierung an den folgenden Punkten im Synchronisierungsprozess aus:

  • Bevor Änderungen vom Abonnenten auf den Herausgeber hochgeladen werden.

  • Bevor änderungen vom Herausgeber auf den Abonnenten heruntergeladen werden.

Der Seriendruck-Agent verwendet diese allgemeine Generation als Ausgangspunkt beim Aufzählen der Generationen, die während der Upload- und Downloadphasen der Zusammenführungssynchronisierung an ein Partnerreplikat gesendet werden sollen.

Der Seriendruck-Agent verarbeitet Generationen in Batches, auch als Generierungsbatches bezeichnet. Standardmäßig sind 100 Generationen in jedem Generierungsbatch enthalten, den der Seriendruck-Agent vom Abonnenten auf den Herausgeber hochlädt, oder lädt vom Herausgeber auf den Abonnenten herunter. Die Batchgröße der Generierung kann über die -UploadGenerationsPerBatch Parameter und den -DownloadGenerationsPerBatch Seriendruck-Agent oder über das Seriendruck-Agent-Profil konfiguriert werden. Wenn mehr als 100 Generationen vorhanden sind, die Sie zwischen einem Herausgeber (oder einem Erneutveröffentlicher) und einem Abonnenten austauschen müssen (d. h. herunterladen und hochladen) müssen, verarbeitet der Seriendruck-Agent mehrere Generierungsbatches. Die Anzahl der Batches hängt von der Anzahl der Generationen ab, die der Seriendruck-Agent austauschen muss, und den Generationen pro Batcheinstellungen, die für eine bestimmte Zusammenführungssitzung in Kraft sind.

In einer Situation, in der mehrere Generierungsbatches ausgetauscht werden, kann der Seriendruck-Agent verwandte übergeordnete und untergeordnete Änderungen auf zwei separate Generierungsbatches aufteilen. Wenn dies der Fall ist, kann der Seriendruck-Agent eine untergeordnete Änderung in einem Generierungsbatch vor dem Generierungsbatch bereitstellen, der die zugeordnete übergeordnete Änderung enthält. Bei hierarchischen Zusammenführungstopologien, die wiederverwendete Herausgeber verwenden, gibt es eine selten auftretende Situation, in der die Aufteilung von übergeordneten und untergeordneten Änderungen über Generierungsbatches hinweg zu einer Nichtkonvergenz führen kann. Weitere Informationen zur Nichtkonverigenz finden Sie im folgenden Artikel:

Nichtkonvergenz, wenn SQL Server untergeordnete und übergeordnete Generationen in separaten Generierungsbatches verarbeitet.

Sie können die -UploadGenerationsPerBatch zuvor erläuterten Parameter erhöhen, -DownloadGenerationsPerBatch um das Aufteilen von übergeordneten und untergeordneten Änderungen über Generierungsbatches hinweg zu vermeiden.

Die Reihenfolge der Artikelverarbeitung wird in einem bestimmten Generierungsbatch gemäß den zuvor erläuterten Regeln beibehalten. Der Seriendruck-Agent kann jedoch keine Artikelverarbeitungsreihenfolge über Generierungsbatches hinweg verwalten.