Wie kann ich das Problem beheben, dass Amazon Redshift in den Einzelmodus gewechselt hat?

Lesedauer: 4 Minute
0

Ich möchte eine AWS Database Migration Service (AWS DMS)-Aufgabe verwenden, um Daten zu Amazon Redshift zu migrieren. Meine Aufgabe hat jedoch Latenz- oder Dateninkonsistenzprobleme, und ich sehe Protokolleinträge wie „XXXXBulk apply operation failed. Trying to execute bulk statements in 'one-by-one' mode XXXXX.“

Kurzbeschreibung

Amazon Redshift ist ein OLAP-Data Warehouse (Online Analytic Processing), das aus Kostengründen nicht für häufige Transaktionen ausgelegt ist. Standardmäßig verwendet AWS DMS den Batch Apply Mode, um die Änderungen stapelweise zu verarbeiten. Wenn Redshift im Einzelmodus ausgeführt wird, hat die DMS-Aufgabe die Änderungen nicht auf das Ziel angewendet und Dateninkonsistenz- oder Latenzprobleme verursacht. Wenn du den Batch Apply-Modus verwendest, geht AWS DMS wie folgt vor:

  1. Sammelt Änderungen aus einem Batch, der durch die Einstellungen für Batch Apply gesteuert wird.
  2. Erstellt eine Net-Change-Tabelle, die alle Änderungen vom Stapel an der Zielinstanz enthält.
  3. Verwendet einen Algorithmus, der Transaktionen gruppiert und sie in großen Mengen auf das Ziel anwendet.

Wenn eine Migrationsaufgabe, die Daten zu Amazon Redshift repliziert, einen Batch nicht anwenden kann, schlägt AWS DMS nicht den gesamten Batch fehl. AWS DMS schlüsselt den Batch auf und wechselt in den Einzelmodus, um Transaktionen durchzuführen. Wenn AWS DMS auf die Transaktion stößt, die zum Scheitern des Batches geführt hat, protokolliert AWS DMS die Transaktion in der Tabelle awsdms_apply_exceptions auf dem Amazon Redshift-Ziel. Anschließend wendet AWS DMS die anderen Transaktionen im Stapel nacheinander an, bis alle Transaktionen aus diesem Stapel auf das Ziel angewendet werden. Schließlich wechselt AWS DMS für einen neuen Stapel zurück in den Batch Apply Modus und verwendet weiterhin Batch Apply, sofern kein anderer Batch fehlschlägt.

Lösung

Um festzustellen, ob dein Batch fehlgeschlagen ist und AWS DMS den Einzelmodus verwendet hat, überprüfe das AWS DMS-Aufgabenprotokoll. Jedes Mal, wenn ein Batch fehlschlägt und AWS DMS in den Einzelmodus wechselt, wird der folgende Protokolleintrag angezeigt:

„[TARGET_APPLY ]I: Der Vorgang der Massenübernahme ist fehlgeschlagen. Trying to execute bulk statements in 'one-by-one' mode (bulk_apply.c:2175)“

In diesem Fall wendet AWS DMS Transaktionen sequenziell auf das Ziel an, bis AWS DMS bei einer Transaktion im Stapel auf ein Problem stößt. Wenn AWS DMS auf ein Problem stößt, wird die Transaktion protokolliert, und du siehst einen Protokolleintrag ähnlich dem folgenden:

„[TARGET_APPLY ]W: Quelländerungen, die keine Auswirkungen gehabt hätten, wurden nicht auf die Zieldatenbank angewendet. Einzelheiten findest du in der Tabelle ‚awsdms_apply_exceptions' table‘ for details. (endpointshell.c:5984)“

Hinweis: Sofern du in deinen AWS DMS-Aufgabeneinstellungen kein Kontrolltabellenschema angibst, wird die Tabelle awsdms_apply_exceptions standardmäßig im öffentlichen Schema erstellt.

Nachdem AWS DMS die Transaktion protokolliert hat, schließt es die Anwendung aller Transaktionen aus diesem Stapel ab. Dann wechselt AWS DMS wieder zu Batch Apply. In deinen Protokollen siehst du eine Meldung ähnlich der folgenden:

„[TARGET_APPLY ]I: Switch back to bulk apply mode (bulk_apply.c:4751)“

Transaktionsänderungen, die du von einer OLTP-Datenbank (Online Transaction Processing) ausführst, können die Leistung von Amazon Redshift beeinträchtigen. Wenn Batch Apply fehlschlägt, wechselt AWS DMS in den Einzelmodus. Die Ziellatenz erhöht sich für die Dauer der Zeit, in der AWS DMS Transaktionen im Einzelmodus ausführt. Nachdem AWS DMS wieder auf Bulk Apply umgestellt hat, verringert sich die Ziellatenz.

Um dieses Problem zu beheben, stelle eine Verbindung zum Amazon Redshift-Ziel her. Führe dann den folgenden Befehl aus, um die Ausgabe der Tabelle awsdms_apply_exceptions abzurufen, um die Abfrage zu identifizieren, die zum Fehlschlagen des Batches geführt hat:

select * from public.awsdms_apply_exceptions order by 4 desc;

Nachdem du die Abfrage gefunden hast, die den Batch zum Scheitern gebracht hat, überprüfe den Fehler. Behebe das Problem, damit die Aufgaben nicht in den Einzelmodus versetzt werden.

Ähnliche Informationen

Debuggen deiner AWS DMS-Migrationen: Was tun, wenn etwas schief geht?

Verwendung einer Amazon Redshift-Datenbank als Ziel für den AWS Database Migration Service

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren