Wie nutzt AWS DMS Speicher für die Migration?

Letzte Aktualisierung: 18.08.2022

Ich habe eine AWS Database Migration Service (AWS DMS)-Aufgabe, die mehr oder weniger Speicher als erwartet belegt. Wie nutzt AWS DMS Speicher für die Migration und wie kann ich die Speicherauslastung meiner Replikations-Instance optimieren?

Kurzbeschreibung

Eine Replikations-Instance von AWS DMS nutzt Sspeicher, um die Replikations-Engine auszuführen. Diese Engine ist entweder für die Ausführung von SELECT-Anweisungen auf der Quell-Engine während der Volllastphase oder für das Lesen aus dem Transaktionsprotokoll der Quell-Engine während der Datenänderungserfassungsphase (Change Data Capture, CDC) verantwortlich. Diese Datensätze werden zum Ziel migriert und dann im Rahmen des Validierungsprozesses mit den entsprechenden Datensätzen in der Zieldatenbank verglichen. So funktioniert der generische Migrationsfluss in AWS DMS.

AWS DMS verwendet außerdem Speicher für die Aufgabenkonfiguration und für den Datenfluss von der Quelle zum Ziel.

Auflösung

Aufgaben mit eingeschränkten LOB-Einstellungen

Wenn Sie Daten mithilfe einer AWS-DMS-Aufgabe mit eingeschränkten LOB-Einstellungen migrieren, wird Speicher im Voraus basierend auf LobMaxSize für jede LOB-Spalte zugewiesen. Wenn Sie diesen Wert zu hoch festlegen, schlägt Ihre Aufgabe möglicherweise aufgrund eines Fehlers Out of Memory (OOM) fehl, abhängig von der Anzahl der zu migrierenden Datensätze und der CommitRate.

Wenn Sie also Ihre Aufgabe mit hohen Werten konfigurieren, stellen Sie sicher, dass die AWS DMS-Instance über genügend Speicher verfügt.

{
  "TargetMetadata": {
  "SupportLobs": true,
  "FullLobMode": false,
  "LobChunkSize": 0,
  "LimitedSizeLobMode": true,
  "LobMaxSize": 63,
  "InlineLobMaxSize": 0,
  }

Aufgaben mit aktivierter Validierung

Wenn Sie mit einer AWS-DMS-Aufgabe migrieren, die ValidationEnabled=true aufweist, wird möglicherweise eine zusätzliche Speicherbelegung angezeigt. Dies geschieht, weil AWS DMS ThreadCount * PartitionSize-Datensätze sowohl aus der Quell- als auch aus der Zieldatenbank abruft. Anschließend werden die entsprechenden Daten auf der Replikations-Instance verglichen. Sie beobachten also eine zusätzliche Speichernutzung auf allen drei Replikations-Instances und auf jedem Endpunkt während der Migration.

Um die Menge des verwendeten Speichers zu begrenzen, ignorieren Sie LOB-Spalten mithilfe von SkipLobColums. Sie können die Validierung auch getrennt von der Migrationsaufgabe durchführen, indem Sie eine separate Replikations-Instance oder eine AWS-DMS-Aufgabe verwenden. Verwenden Sie dazu die Einstellung „ValidationOnly“:

"ValidationSettings": {
  "EnableValidation": true,
  "ThreadCount": 5,
  "PartitionSize": 10000,
  "ValidationOnly": false,
  "SkipLobColumns": false,
  },

Weitere Informationen finden Sie unter AWS-DMS-Datenvalidierung.

Aufgaben mit parallelen Threads in Volllast- und CDC-Phasen

Wenn Sie ein Nicht-RDBM-Ziel verwenden, bestimmt ParallelLoadThreads * ParallelLoadBufferSize die Anzahl der Threads und die Größe der Datenübertragung zum Ziel. In ähnlicher Weise bestimmt ParallelApplyThreads * ParallelApplyBufferSize die Anzahl der Threads und die Größe der Datenübertragung während der CDC-Phase. AWS DMS speichert die aus der Quelle abgerufenen Daten in ParallelLoadQueuesPerThread und ParallelApplyQueuesPerThread. Stellen Sie beim Optimieren dieser Einstellungen sicher, dass die AWS-DMS-Instance und das Ziel über die Kapazität verfügen, den Workload zu verarbeiten.

{
  "TargetMetadata": {
    "ParallelLoadThreads": 0,
    "ParallelLoadBufferSize": 0,
    "ParallelLoadQueuesPerThread": 0,
    "ParallelApplyThreads": 0,
    "ParallelApplyBufferSize": 0,
    "ParallelApplyQueuesPerThread": 0
  },

Weitere Informationen zu diesen Einstellungen finden Sie unter Einstellungen für Ziel-Metadaten-Aufgaben.

Aufgaben mit Batch-Apply-Einstellungen

Wenn Sie eine AWS-DMS-Aufgabe mit Batch-Apply-Einstellungen verwenden, verwenden Sie die folgenden Best Practices:

  • Die Standard-Batch-Konfiguration reicht immer aus, um den normalen Workload zu bewältigen. Im Batch-Prozess werden die Größe des Batches und die Häufigkeit, mit der er auf das Ziel angewendet wird, durch die Einstellungen BatchApplyTimeoutMin, BatchApplyTimeoutMax und BatchApplyMemoryLimit bestimmt. Diese Einstellungen wirken zusammen, um Änderungen im Batch anzuwenden. Wenn Sie diese Einstellungen aufgrund des enormen Workloads der Quelle optimieren müssen, stellen Sie sicher, dass die AWS-DMS-Instance über ausreichend Speicher verfügt. Andernfalls kann ein OOM-Fehler auftreten.
  • Legen Sie BatchApplyMemoryLimit nicht auf mehr als die Größe des Speichers der Replikations-Instance fest, da sonst ein OOM-Fehler auftreten kann. Beachten Sie alle anderen Aufgaben, die gleichzeitig mit der AWS-DMS-Aufgabe ausgeführt werden, die Sie für die Migration verwenden, wenn Sie BatchApplyMemoryLimit festlegen.
  • Transaktionen mit langer Laufzeit werden im Speicher aufbewahrt, wenn BatchApplyPreserveTransaction über mehrere Batches hinweg = true ist. Dies kann auch zu OOM-Fehlern führen, abhängig von den Speichereinstellungen des nächsten Abschnitts.
  • Verwenden Sie die Einstellung BatchSplitSize, um die Anzahl der Änderungen festzulegen, die in jedem Batch enthalten sein sollen, und um den Speicherverbrauch zu begrenzen:
{
  "TargetMetadata": {
    "BatchApplyEnabled": false,
  },
},
  "ChangeProcessingTuning": {
    "BatchApplyPreserveTransaction": true,
    "BatchApplyTimeoutMin": 1,
    "BatchApplyTimeoutMax": 30,
    "BatchApplyMemoryLimit": 500,
    "BatchSplitSize": 0,
  },

Weitere Informationen zur Verwendung des Batch-Apply-Modus finden Sie unter Ändern der Verarbeitungsoptimierungseinstellungen.

  • Während der CDC bestimmt MinTransactionSize, wie viele Änderungen in jeder Transaktion auftreten. Die Größe der Transaktionen auf der Replikations-Instance wird von MemorylimitTotal gesteuert. Verwenden Sie diese Einstellung, wenn Sie mehrere CDC-Aufgaben ausführen, die viel Speicher benötigen. Stellen Sie sicher, dass Sie diese Einstellung basierend auf dem Transaktions-Workload jeder Aufgabe aufteilen.
  • Legen Sie MemoryKeepTime fest, um den Speicher zu begrenzen, der von lang laufenden Transaktionen auf der Quelle verbraucht wird. Oder, wenn ein großer Stapel von INSERT- oder UPDATE-Anweisungen auf der Quelle ausgeführt wird, erhöhen Sie diese Zeit, um die Änderungen aus der Verarbeitung in der Nettoänderungstabelle beizubehalten.
  • Legen Sie StatementCacheSize fest, um die Anzahl der vorbereiteten Anweisungen zu steuern, die in der Replikations-Instance gespeichert werden.
  • Wenn Ihre AWS-DMS-Replikations-Instance ein großes Volumen an freiem Speicher enthält, passen Sie die Einstellungen in diesem Beispiel an. Das bedeutet, dass AWS DMS den Workload im Speicher selbst übernimmt statt ihn in den AWS-DMS-Speicher zu übernehmen.

"ChangeProcessingTuning": {
    "MinTransactionSize": 1000,
    "CommitTimeout": 1,
    "MemoryLimitTotal": 1024,
    "MemoryKeepTime":
  60,
    "StatementCacheSize": 50
  },

Weitere Informationen zu diesen Einstellungen finden Sie unter Ändern der Verarbeitungsoptimierungseinstellungen.

Überwachen des Speicherverbrauchs Ihrer Replikations-Instance

Es gibt mehrere Möglichkeiten, die Speicherauslastung Ihrer Replikations-Instance zu überwachen. Um die einzelne Aufgabe zu isolieren, die am meisten Speicher verbraucht, sortieren Sie Ihre Aufgaben nach MemoryUsage. Um zu erfahren, warum die Aufgabe Speicher blockiert, vergleichen Sie CDCChangesMemorySource und CDCChangesMemoryTarget, und führen Sie dann eine Fehlerbehebung für den jeweiligen Endpunkt aus.

Die Replikations-Instance selbst benötigt nur minimalen Speicher, um das Replikationsmodul auszuführen. Um zu überprüfen, ob zusätzliche AWS-DMS-Aufgaben auf der Replikations-Instance ausgeführt werden können, überprüfen Sie die Metrik AvailableMemory in Amazon CloudWatch. Erstellen Sie dann eine neue Aufgabe, um die verfügbare Menge an FreeMemory zu nutzen. Wenn Sie die AWS DMS-Aufgabe ausführen, überwachen Sie FreeMemory und SwapUsage, um festzustellen, ob ein Ressourcenkonflikt ein Problem darstellt. Weitere Informationen finden Sie unter Metriken der Replikations-Instance.

Vermeiden von Speicherproblemen

Um richtig einzuschätzen, wie viel Speicher Ihre AWS-DMS-Aufgabe verwendet, empfiehlt es sich, eine Instance mit derselben Konfiguration in einer niedrigeren Umgebung (Entwicklung und Staging) zu testen.

Führen Sie außerdem eine Machbarkeitsnachweismigration durch, bevor Sie mit Produktionsdaten arbeiten.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?