Wie kann ich die DMS-Funktion „Batch Apply“ verwenden, um die CDC-Replikationsleistung zu verbessern?

Lesedauer: 8 Minute
0

Ich führe eine AWS Database Migration Service (AWS DMS) -Aufgabe mit Volllast und Change Data Capture (CDC) aus. Die Quelllatenz ist nicht hoch, aber die Ziellatenz ist hoch oder sie nimmt zu. Wie kann ich die CDC-Replikationsphase beschleunigen?

Kurzbeschreibung

AWS DMS verwendet die folgenden Methoden, um Daten in der Phase der Change Data Capture (CDC) zu replizieren:

  • Transaktionale anwenden
  • Batch anwenden

Der AWS DMS CDC-Prozess ist standardmäßig single-thread (transaktionale Anwendung). Für die SQL-Replikation wird dieselbe Methode verwendet wie für alle anderen OLTP-Datenbank-Engines (Online Transactional Processing). Die DMS-CDC-Replikation hängt von den Transaktionsprotokollen der Quelldatenbank ab. Während der laufenden Replikationsphase wendet DMS die Änderungen mithilfe einer transaktionalen Anwendungsmethode wie folgt an:

  1. DMS liest Änderungen aus dem Transaktionsprotokoll von der Quelle in den Speicher der Replikations-DB-Instanz.
  2. DMS übersetzt Änderungen und leitet sie dann an eine Sortierkomponente weiter.
  3. Die Sortierkomponente sortiert Transaktionen in der Reihenfolge ihrer Commits und leitet sie dann sequentiell an das Ziel weiter.

Wenn die Änderungsrate in der Quell-DB hoch ist, kann dieser Vorgang einige Zeit in Anspruch nehmen. Möglicherweise stellen Sie einen Anstieg der CDC-Ziellatenzmetriken fest, wenn DMS eine hohe eingehende Arbeitslast aus der Quell-DB empfängt.

DMS verwendet eine single-threaded Replikationsmethode, um die CDC-Änderungen zu verarbeiten. DMS stellt die Einstellung ** BatchApplyEnabled auf Taskebene bereit, ** um Änderungen an einem Ziel mithilfe von Batches schnell zu verarbeiten. **BatchApplyEnabled ** ist nützlich, wenn die Arbeitsbelastung der Quell-DB hoch ist und Sie eine Aufgabe mit einer hohen Ziel-CDC-Latenz haben. Standardmäßig deaktiviert ** DMS BatchApplySetting **. Sie können dies mithilfe der AWS-Befehlszeilenschnittstelle (AWS CLI) aktivieren.

So funktioniert Batch Apply

Wenn Sie eine Aufgabe mit ** BatchApplyEnabled ausführen**, verarbeitet DMS Änderungen wie folgt:

  1. DMS sammelt die Änderungen stapelweise aus den Quell-DB-Transaktionsprotokollen.
  2. DMS erstellt eine Tabelle namens Net Changes Table mit allen Änderungen aus dem Stapel.
  3. Diese Tabelle befindet sich im Speicher der Replikations-DB-Instance und wird an die Ziel-DB-Instance weitergegeben.
  4. DMS wendet einen Netzänderungsalgorithmus an, der alle Änderungen aus der Net-Change-Tabelle an die tatsächliche Zieltabelle weitergibt.

Wenn Sie beispielsweise eine DMS-Aufgabe mit ** BatchApplyEnabled ** ausführen und Sie eine neue Zeile einfügen, diese Zeile zehn Mal aktualisieren und diese Zeile in einem einzigen Stapel löschen, dann verteilt DMS all diese Transaktionen und überträgt sie nicht. Dies geschieht, weil die Zeile irgendwann gelöscht wird und nicht mehr existiert. Dieser Prozess reduziert die Anzahl der tatsächlichen Transaktionen, die auf das Ziel angewendet werden.

**BatchApplyEnabled ** wendet den Net Changes-Algorithmus auf Zeilenebene einer Tabelle innerhalb eines Batches einer bestimmten Aufgabe an. Wenn die Quelldatenbank also häufig geändert wird (aktualisieren, löschen und einfügen) oder eine Kombination dieser Arbeitslasten in denselben Zeilen enthält, können Sie ** BatchApplyEnabled optimal nutzen.**Dadurch werden die Änderungen, die auf das Ziel angewendet werden müssen, minimiert. Wenn der gesammelte Stapel hinsichtlich der Änderungen einzigartig ist (Änderungen für verschiedene Zeilendatensätze aktualisieren/löschen/einfügen), kann der Net-Change-Table-Algorithmusprozess keine Ereignisse filtern. Daher werden alle Batch-Ereignisse im Batch-Modus auf das Ziel angewendet. Tabellen müssen entweder einen Primärschlüssel oder einen eindeutigen Schlüssel haben, damit die Batch- Anwendung funktioniert.

DMS stellt auch die Einstellung ** ** BatchApplyPreserveTransaction für die Optimierung der Änderungsverarbeitung bereit. Wenn Sie ** BatchApplyEnabled aktivieren**, wird ** BatchApplyPreserveTransaction standardmäßig ** aktiviert. Wenn Sie es auf ** True setzen**, bleibt die Transaktionsintegrität erhalten. Es ist gewährleistet, dass eine Batch alle Änderungen innerhalb einer Transaktion ab der Quelle enthält. Diese Einstellung gilt nur für Oracle-Zielendpunkte.

Hinweis:Achten Sie auf die Vor- und Nachteile dieser Einstellung. Wenn die ** Einstellung ** BatchApplyPreserveTransaction auf ** True gesetzt ist, erfasst DMS die gesamte Transaktion mit langer Laufzeit im Speicher der Replikations-DB-Instanz. Dies erfolgt gemäß den Aufgabeneinstellungen ** MemoryLimitTotal und MemoryKeepTime und tauscht nach Bedarf aus, bevor Änderungen an die Net-Change-Tabelle gesendet werden. Wenn die **Einstellung ** BatchApplyPreserveTransaction auf false gesetzt ist, können sich Änderungen aus einer einzelnen Transaktion über mehrere Batches erstrecken. Dies kann zu Datenverlust führen, wenn es teilweise angewendet wird, z. B. weil die Zieldatenbank nicht verfügbar ist.

Weitere Informationen zur DMS-Latenz und zum Batch-Apply-Prozess finden Sie in Teil 2 und Teil 3 der Blogs Debugging your AWS DMS-Migrationen.

Anwendungsfälle für die Batch Apply

Sie können Batch Apply unter den folgenden Umständen verwenden:

  • Bei der Aufgabe wird eine hohe Anzahl von Transaktionen von der Quelle erfasst, was zu einer Ziellatenz führt.
  • Die Aufgabe hat einen Workload aus der Quelle, der eine Kombination aus Einfügen, Aktualisieren und Löschen in denselben Zeilen ist.
  • Es ist nicht erforderlich, die strikte referentielle Integrität des Ziels aufrechtzuerhalten (deaktivierte FKs).

Einschränkungen

Die Funktion Batch Apply hat derzeit die folgenden Einschränkungen**: **

  • Das Amazon Redshift-Ziel verwendet standardmäßig Batch Apply. Das Amazon Simple Storage Service (Amazon S3) -Ziel ist gezwungen, Transactional Apply zu verwenden.
  • Batch Apply kann nur für Tabellen mit Primärschlüssel/eindeutigem Index funktionieren. Bei Tabellen ohne Primärschlüssel/eindeutigen Index wendet Bulk Apply die Einfügung nur im Bulk-Modus an, aktualisiert und löscht sie jedoch nacheinander. Wenn die Tabelle einen Primärschlüssel/einen eindeutigen Index hat, aber ein Umschalten im Einzelmodus beobachtet wird, finden Sie weitere Informationen unter Wie kann ich beheben, warum Amazon Redshift in den Einzelmodus gewechselt ist, weil ein Massenvorgang während einer AWS DMS-Aufgabe fehlgeschlagen ist?
  • Wenn LOB-Spalten in der Replikation enthalten sind, können Sie BatchApplyEnabled nur im eingeschränkten LOB-Modus verwenden. Weitere Informationen finden Sie unter Aufgabeneinstellungen für Zielmetadaten.
  • Wenn BatchApplyEnabled auf True gesetzt ist, generiert AWS DMS eine Fehlermeldung, wenn eine Zieltabelle eine eindeutige Einschränkung hat.

lÖSUNG

Hinweis: Wenn Sie beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste AWS CLI-Version verwenden.

BatchApplySetting ist standardmäßig deaktiviert. Sie können diese Einstellung entweder mit der AWS-CLI oder der AWS DMS-Konsole aktivieren. Führen Sie die folgenden Einrichtungsaufgaben auf Ihrem System aus, bevor Sie die Batch-Einstellung aktivieren:

Überprüfen Sie den Status der Batch-Einstellungen einer vorhandenen Aufgabe

  1. Öffnen Sie die AWS DMS-Konsole.
  2. Wählen Sie im Navigationsbereich die Option Aufgaben zur Datenbankmigration
  3. Wählen Sie Ihre Aufgabe aus und wählen Sie dann ** Task Setting (JSON)**. Im JSON ist BatchApplyEnabled im Status deaktiviert aufgeführt.

Aktivieren Sie die Batch-Einstellung mit der AWS-CLI

  1. Öffnen Sie das System mit installierter AWS-CLI.
  2. Führen Sie den Befehl aws configure aus, um die AWS-CLI-Eingabeaufforderung zu öffnen.
  3. Geben Sie Ihre AWS-Zugangsschlüssel-ID ein und drücken Sie dann die Eingabetaste.
  4. Geben Sie Ihre geheime **AWS-Schlüssel-ID ein ** und drücken Sie dann die Eingabetaste.
  5. Geben Sie den Regionsnamen Ihrer DMS-Ressourcen ein und drücken Sie dann die Eingabetaste.
  6. Geben Sie das Ausgabeformat ein und drücken Sie dann die Eingabetaste.
  7. Führen Sie den Befehl modify-replication-task mit dem Task-ARN und den Batch-Einstellungsbedingungen aus.

**Hinweis:Vergewissern Sie sich, dass sich die Aufgabe im Status ** Beendet befindet, bevor Sie die Aufgabe ändern. Ändern Sie den ARN mit dem folgenden Befehl, der auf Ihrer Aufgabe basiert, und führen Sie ihn dann aus, um die Aufgabeneinstellung zu ändern.

Nachdem der Befehl erfolgreich in der AWS-CLI ausgeführt wurde, öffnen Sie die DMS-Konsole und überprüfen Sie erneut den Batch-Einstellungsstatus Ihrer Aufgabe. BatchApplyEnabled ist jetzt in der ** Task-Einstellung (JSON) als „aktiviert“ aufgeführt**.

Sie können jetzt die DMS-Aufgabe starten und die Migrationsleistung beobachten.

aws dms modify-replication-task --replication-task-arn arn:aws:dms:us-east-1:123456789123:task:4VUCZ6ROH4ZYRIA25M3SE6NXCM --replication-task-settings "{\"TargetMetadata\":{\"BatchApplyEnabled\":true}}"

Aktivieren Sie die Batch-Einstellung mithilfe der AWS DMS-Konsole

  1. Öffnen Sie die AWS DMS-Konsole.
  2. Wählen Sie im Navigationsbereich die Option ** Datenbankmigrationsaufgabe aus**.
  3. Wählen Sie Ihre Aufgabe aus und klicken Sie dann auf ** Ändern**.
  4. Wählen Sie im ** Abschnitt ** Aufgabeneinstellungen den ** JSON-Editor aus**.
  5. Ändern Sie die Aufgabeneinstellungen, die Sie ändern möchten. Ändern Sie beispielsweise im ** Abschnitt ** targetMetadata ** batchApplyEnabled in ** true ** (die Standardeinstellung ist ** false) ** **.
  6. Klicken Sie auf Speichern, um die Aufgabe zu ändern.

Stellen Sie sicher, dass die Änderungen wirksam wurden, indem Sie die folgenden Schritte ausführen:

  1. Wählen Sie auf der Aufgabenlistenseite die Aufgabe aus, die Sie geändert haben.
  2. Erweitern Sie auf der **Registerkarte „Übersichtsdetails“ die ** Aufgabeneinstellungen (JSON).
  3. Überprüfen Sie die Aufgabeneinstellungen für die Aufgabe.

Beheben Sie Fehler bei CDCLatencyTarget high, nachdem Sie die Aufgabe im Batch-Modus ausgeführt haben

Wenn der **CDCLatencyTarget nach der Ausführung der Aufgabe im Batch-Modus hoch ** ist, kann die Latenz folgende Ursachen haben:

  • Langfristige Transaktion verlief aufgrund fehlender primärer und sekundärer Indizes wie geplant
  • Unzureichende Ressourcenverfügbarkeit, um die Arbeitslast zielgerecht zu verarbeiten
  • Hohe Ressourcenknappheit auf der DMS-Replikationsinstanz

Folgen Sie den bewährten Methoden von DMS, um diese Probleme zu beheben.


Damit zusammenhängende Informationen

Überwachung von AWS DMS-Aufgaben

So erstellen Sie ein Skript für eine Datenbankmigration

Automatisierung von AWS DMS-Migrationsaufgaben

Wie erstelle ich Quell- oder Zielendpunkte mit AWS DMS?

Einstellungen für die Verarbeitungsoptimierung ändern

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren