Die Zusammenführungsreplikation schlägt beim Ausführen der Abfrage fehl


7

Meine Zusammenführungsreplikation hat heute Morgen einwandfrei funktioniert. Seit ein oder zwei Stunden wird in meinen Synchronisationsstatusfenstern immer wieder folgende Meldung angezeigt:

Die Thread-ID 3108 wartet 15 Sekunden, bevor die Abfrage in Publisher 'MSI-SQL-MAS01' wiederholt wird.

Kann mir jemand sagen, was los ist? Die Datenbank ist 500 GB groß und wird auch ziemlich häufig verwendet. Die Replikation muss jedoch funktionieren. Wir müssen die Datenbank beim Abonnenten synchron halten.

Auch das sehe ich nach ungefähr einer Minute:

Eine auf dem Publisher 'MSI-SQL-MAS01' ausgeführte Abfrage ist fehlgeschlagen, da die Verbindung als Opfer eines Deadlocks ausgewählt wurde. Bitte führen Sie den Zusammenführungsprozess erneut aus, wenn dieser Fehler nach internen Wiederholungen durch den Zusammenführungsprozess weiterhin angezeigt wird.

Wie ich gerade sagte, hat die Replikation heute Morgen einwandfrei funktioniert. Ich habe auch den Zusammenführungsagenten wie den vorgeschlagenen Fehler neu gestartet, aber ohne Ergebnisse.

Ich habe es auch versucht

update sysmergepublications set [generation_leveling_threshold] = 0

sowohl bei der Abonnenten- als auch bei der Herausgeberdatenbank, aber es scheint kein Glück zu sein. Nur manchmal wird auch der folgende Fehler angezeigt:

Der Zusammenführungsprozess wiederholt einen fehlgeschlagenen Vorgang gemäß Artikel 'xx' - Grund: 'Der Zusammenführungsprozess konnte die Zeile nicht synchronisieren.'

Danke im Voraus.


Ich sehe meinen früheren Fehler nicht mehr. Das einzige was ich jetzt bekomme ist:

"Der Zusammenführungsprozess wiederholt einen fehlgeschlagenen Vorgang gemäß Artikel 'xx' - Grund: 'Der Zusammenführungsprozess konnte die Zeile nicht synchronisieren.'"

Der Profiler macht für mich keinen Sinn. Ich sehe keine relevanten Informationen.

Was macht es, wenn ich das Abonnement neu initialisiere? Ich hoffe, ich brauche dafür keinen neuen Schnappschuss, denn das wäre derzeit unmöglich. Die Datenbank ist über 500 GB groß und der Snapshot dauert über 9 Stunden. Die Datenbank ist ständig in Produktion und wird sehr häufig verwendet. Eine Sperre der Datenbank zum Erstellen eines Snapshots ist also kein Problem.


Okay, das sehe ich im Konfliktbetrachter:

Dieselbe Zeile wurde sowohl bei 'master_server' als auch bei 'Slave_server' aktualisiert. Der Resolver hat das Update von 'master_server' als Gewinner ausgewählt.

Wie ist es möglich, dass dieselbe Zeile sowohl auf dem Master- als auch auf dem Slave-Server aktualisiert wird, während unsere Anwendung mit dem Master-Server verbunden ist? Es sieht so aus, als würde etwas auf beiden Servern dieselbe Zeile mit unterschiedlichem Inhalt aktualisieren und den Merge-Agent zum Absturz bringen.

Antworten:


1

"Es sieht so aus, als würde etwas auf beiden Servern dieselbe Zeile mit unterschiedlichem Inhalt aktualisieren und den Absturz des Merge-Agenten verursachen?" Dies wird durch Zusammenführungskonflikttabellen behandelt und würde die von Ihnen beschriebenen Probleme nicht verursachen. Diese Konflikttabellen befinden sich in der Herausgeberdatenbank und haben den folgenden Namen: MSMerge_conflict__.

Um Ihre Frage zu beantworten, was die Neuinitialisierung bewirkt, erstellt die Neuinitialisierung standardmäßig einen Snapshot Ihrer veröffentlichten Artikel, löscht die Artikel auf der Abonnentenseite, erstellt die Artikel auf der Abonnentenseite neu und lädt dann Daten aus dem Snapshot in die Abonnentenartikel . Da dies eine Produktionsumgebung ist und diese Artikel auf der Abonnentenseite verfügbar sein müssen, sollte dies nur als letzter Ausweg verwendet werden.

Sie können die Tabelle MSrepl_errors in der Verteilungsdatenbank abfragen. Dadurch erhalten Sie eine Befehls-ID und eine xact_seqno. Sie können diese Werte als Eingaben in die gespeicherte Prozedur sys.sp_browsereplcmds verwenden. Dadurch erhalten Sie einen Befehlstext, der tatsächlich fehlschlägt. Mithilfe dieser Informationen können Sie die Art des Fehlers besser verstehen. Wenn eine bestimmte Zeile beim Abonnenten nicht eingefügt oder gelöscht werden kann, müssen Sie möglicherweise entweder die vorhandene Zeile löschen (um das Einfügen zu ermöglichen) oder eine Dummy-Zeile einfügen (um das Löschen zu ermöglichen).

Ich hoffe diese Information hilft,

Matt


0

Ich würde vermuten, dass das Problem nicht die Zusammenführungsreplikation ist, sondern der Deadlock. Nehmen Sie einen Profiler-Trace mit einem Deadlock-Diagramm und beheben Sie von dort aus Fehler. Wenn Sie nach einer Weile nicht mehr auf den Grund gehen können, versuchen Sie, das Abonnement neu zu initialisieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.