Wie nutzt AWS DMS Speicher für die Migration?

Lesedauer: 6 Minute
0

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 Speicher, um die Replikations-Engine auszuführen. Diese Engine ist für die Ausführung von SELECT-Anweisungen auf der Quell-Engine während der Volllastphase verantwortlich. Außerdem liest die Replikations-Engine während der CDC-Phase (Change Data Capture) aus dem Transaktionsprotokoll der Quell-Engine. 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 fehl. Dieser Fehler tritt aufgrund eines Out-of-Memory-Fehlers (OOM) auf, abhängig von der Anzahl der Datensätze, die Sie migrieren, 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,
  }

Weitere Informationen finden Sie unter Festlegen der LOB-Unterstützung für Quelldatenbanken in einer AWS-DMS-Aufgabe.

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 während der Migration eine zusätzliche Speichernutzung in der Replikationsinstanz, Quelldatenbank und Zieldatenbank.

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-RDBMS-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, dass andere Aufgaben 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.

Andere speicherbezogene Aufgabeneinstellungen

  • 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. Erhöhen Sie diese Zeit, um die Änderungen aus der Verarbeitung in der Tabelle der Nettoänderungen 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 einzuschätzen, wie viel Speicher Ihre AWS-DMS-Aufgabe verwendet, testen Sie eine Instance mit derselben Konfiguration in einer niedrigeren Umgebung (Entwicklung und Staging).

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


Relevante Informationen

Auswahl der richtigen AWS-DMS-Replikations-Instance für Ihre Migration

Auswahl der besten Größe für eine Replikations-Instance

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren