Mit einer Zusammenführungspublikation zum Replizieren von BLOBs (Typ image
) wurde eine sehr hohe Tempdb-Festplatten-E / A für meine Datengröße erhalten. Die Veröffentlichung ist nur zum Herunterladen und enthält keine Filter.
Hohe Festplatten-E / A werden durch Synchronisation verursacht (wenn keine Abonnenten synchronisieren, ist alles in Ordnung), die stark mit der Anzahl der Abonnenten korreliert. Es passiert auch dann, wenn zwischen den Synchronisierungen keine Daten bei Publisher geändert werden, und das stört mich.
- Größe der replizierten Tabelle: 7 MB (Gesamtzahl der Zeilen beträgt ca. 100)
- Tempdb-E / A: ~ 30 MB / s zum Schreiben (Protokoll- und Datendateien)
- Anzahl der Teilnehmer: etwas mehr als 100, die alle 30 Minuten synchronisiert werden (mehr oder weniger gleichmäßig).
- Die Aufbewahrungsfrist beträgt 14 Tage
Verwenden von SQL Server 2008 bei Publisher, SQL Server 2005-2008R2 bei Abonnenten. Alle Abonnenten verwenden die Websynchronisation.
Darüber hinaus nimmt die Synchronisierung beim Teilnehmer viel Zeit in Anspruch, wobei mehrere Vorkommen replmerg.log
wie folgt auftreten:
DatabaseReconciler, 2015/04/21 12:13:40.348, 3604, 25088, S2, INFO: [WEBSYNC_PROTOCOL] Sending client ReconcilerPhase WebSyncReconcilerPhase_RegularDownload DatabaseReconciler, 2015/04/21 12:13:47.063, 3604, 25194, S2, INFO: [WEBSYNC_PROTOCOL] Received server ReconcilerPhase WebSyncReconcilerPhase_LastRegularDownload
Versuchte Einstellung @stream_blob_columns
ohne Wirkung ein- und ausschalten.
Die Frage ist: Ist es eine gute Idee, die Merge-Replikation zu verwenden, um diese Blobs an Abonnenten zu senden? Wir haben andere Veröffentlichungen (obwohl sie keine BLOB-Spalten haben) mit vielen Daten ohne Tempdb-Problem. Ist es ein SQL Server-Fehler oder ein schlechtes Setup?
Publisher und Distributor befinden sich in derselben Instanz, SQL Server 2008 SP4. Sie können sich nicht sicher sein, ob Abonnenten vorhanden sind. Einige von ihnen sind möglicherweise nicht auf dem neuesten Stand. Auf jeden Fall kann ich eine Testumgebung mit wenigen Abonnenten mit kontrollierten Versionen vorbereiten, wenn dies zu helfen scheint.
Bestätigt, dass übermäßige Tempdb-Nutzung durch die Ausführung von verursacht sys.sp_MSenumgenerations90
. Überprüfte MSMerge_genhistory
Tabelle, gefunden über 1,2 Millionen Datensätze, wobei pubid
null ist.
Fand dieses Gespräch mit dem Replikationsguru:
Ausgeführt sp_mergemetadataretentioncleanup
ohne Wirkung.
Es wurde eine Bemerkung zu einem Fall wie diesem gefunden (zu viele Zeilen MSmerge_genhistory
), in dem das Löschen von Zeilen mit pubid
null und genstatus
= 1 zur Korrektur der Replikation beitrug.
Gelöschte Zeilen, in denen pubid
null ist (was bedeutet, dass alle Abonnenten synchronisiert sind und nicht - werden im "manuellen Modus" neu initialisiert) und die Festplatten-E / A wieder normal ist!
Ich habe das Gefühl, dass diese Situation durch die Tatsache verursacht werden könnte, dass alle meine Abonnenten über WebSync anonym sind und die meisten von ihnen denselben Hostnamen haben. Ich werde versuchen zu überprüfen, ob der -hostname
Schlüssel hilft, Datensätze nicht zu multiplizieren MSmerge_genhistory
.