In che modo AWS DMS utilizza la memoria per la migrazione?

Ultimo aggiornamento: 18/08/2022

Ho un'attività AWS Database Migration Service (AWS DMS) che utilizza più o meno memoria del previsto. In che modo AWS DMS utilizza la memoria per la migrazione e come posso ottimizzare l'utilizzo della memoria della mia istanza di replica?

Breve descrizione

Un'istanza di replica di AWS DMS utilizza la memoria per eseguire il motore di replica. Questo motore è responsabile dell'esecuzione delle istruzioni SELECT sul motore di origine durante la fase di carico completo. Inoltre, il motore di replica legge dal registro delle transazioni del motore di origine durante la fase di acquisizione dei dati delle modifiche (CDC). Questi record vengono migrati nella destinazione e quindi confrontati con i record corrispondenti nel database di destinazione come parte del processo di convalida. Ecco come funziona il flusso di migrazione generico in AWS DMS.

AWS DMS utilizza anche la memoria per la configurazione delle attività e per il flusso di dati dall'origine alla destinazione.

Risoluzione

Attività con impostazioni LOB limitate

Quando esegui la migrazione dei dati utilizzando un'attività AWS DMS con impostazioni LOB limitate, la memoria viene allocata in anticipo in base alla LobMaxSize per ogni colonna LOB. Se imposti questo valore troppo alto, l'operazione potrebbe non riuscire. Questo errore si verifica a causa di un errore OOM (Out of Memory), a seconda del numero di record da migrare e del CommitRate.

Quindi, se configuri l'attività con valori elevati, assicurati che l'istanza di AWS DMS disponga di memoria sufficiente.

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

Attività con ValidationEnabled

Quando esegui la migrazione utilizzando un'attività AWS DMS con ValidationEnabled=true, potresti notare un ulteriore utilizzo di memoria. Questo accade perché AWS DMS recupera i record ThreadCount * PartitionSize sia dal database di origine che da quello di destinazione. In seguito, confronta i dati corrispondenti sull'istanza di replica. Pertanto, durante la migrazione si osserva un utilizzo aggiuntivo della memoria nell'istanza di replica, nel database di origine e nel database di destinazione.

Per limitare la quantità di memoria in uso, ignorare le colonne LOB utilizzando SkipLobColumns. È inoltre possibile eseguire la convalida separatamente dall'attività di migrazione utilizzando un'istanza di replica separata o un'attività AWS DMS. A tale scopo, utilizzare l'impostazione ValidationOnly:

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

Per ulteriori informazioni, consulta Convalida dei dati di AWS DMS.

Attività con thread paralleli a carico completo e nelle fasi CDC

Quando si utilizza una destinazione non RDBMS, ParallelLoadThreads * ParallelLoadBufferSize determina il numero di thread e la dimensione del trasferimento dei dati alla destinazione. Allo stesso modo, ParallelApplyThreads * ParallelApplyBufferSize determina il numero di thread e la dimensione del trasferimento dei dati durante la fase CDC. AWS DMS conserva i dati estratti dall'origine in ParallelLoadQueuesPerThread e ParallelApplyQueuesPerThread. Quando ottimizzi queste impostazioni, assicurati che l'istanza e la destinazione di AWS DMS abbiano la capacità di gestire il carico di lavoro.

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

Per ulteriori informazioni su queste impostazioni, consulta Impostazioni delle attività dei metadati di destinazione.

Attività con impostazioni di applicazione in batch

Quando utilizzi un'attività AWS DMS con impostazioni di applicazione in batch, utilizza queste best practice:

  • La configurazione batch predefinita è sempre sufficiente per gestire il normale carico di lavoro. Nel processo batch, la dimensione del batch e la frequenza con cui viene applicato sulla destinazione sono determinate dalle impostazioni BatchApplyTimeoutMin, BatchApplyTimeoutMax e BatchApplyMemoryLimit. Queste impostazioni interagiscono per applicare le modifiche in batch. Se è necessario ottimizzare queste impostazioni a causa del carico di lavoro pesante sull'origine, accertarsi che l'istanza di AWS DMS disponga di memoria sufficiente. In caso contrario, potrebbe verificarsi un errore OOM.
  • Non impostare BatchApplyMemoryLimit su un valore superiore alla dimensione della memoria dell'istanza di replica, altrimenti potrebbe verificarsi un errore OOM. Quando imposti BatchApplyMemoryLimit, tieni presente che altre attività vengono eseguite contemporaneamente all'attività AWS DMS che stai utilizzando per la migrazione.
  • Le transazioni a esecuzione prolungata vengono mantenute in memoria se BatchApplyPreserveTransaction = true su più batch. Ciò può anche causare errori OOM, a seconda delle impostazioni di memoria della sezione successiva.
  • Utilizzare l'impostazione BatchSplitSize per impostare il numero di modifiche da includere in ogni batch e per limitare il consumo di memoria:
{
  "TargetMetadata": {
    "BatchApplyEnabled": false,
  },
},
  "ChangeProcessingTuning": {
    "BatchApplyPreserveTransaction": true,
    "BatchApplyTimeoutMin": 1,
    "BatchApplyTimeoutMax": 30,
    "BatchApplyMemoryLimit": 500,
    "BatchSplitSize": 0,
  },

Per ulteriori informazioni sull'utilizzo della modalità di applicazione in batch, consulta Modificare le impostazioni di ottimizzazione dell'elaborazione.

  • Durante il CDC, MinTransactionSize determina quante modifiche si verificano in ogni transazione. La dimensione delle transazioni sull'istanza di replica è controllata da MemorylimitTotal. Utilizza questa impostazione quando esegui più attività CDC che richiedono molta memoria. Assicurati di ripartire questa impostazione in base al carico di lavoro transazionale di ogni attività.
  • Imposta MemoryKeepTime per limitare la memoria utilizzata dalle transazioni a esecuzione prolungata sull'origine. Oppure, se sull'origine è in esecuzione un grande batch di istruzioni INSERT o UPDATE, aumenta questo tempo. Aumenta questo tempo per conservare le modifiche derivanti dall'elaborazione nella tabella delle modifiche nette.
  • Imposta StatementCacheSize per controllare il numero di istruzioni preparate archiviate nell'istanza di replica.
  • Se l'istanza di replica di AWS DMS contiene un volume elevato di memoria libera, regolare le impostazioni in questo esempio. Ciò significa che AWS DMS gestisce il carico di lavoro nella memoria stessa, piuttosto che scaricarlo frequentemente nell'archiviazione AWS DMS.

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

Per ulteriori informazioni su queste impostazioni, consulta Modificare le impostazioni di ottimizzazione dell'elaborazione.

Monitorare l'utilizzo della memoria dell'istanza di replica

Esistono diversi modi per monitorare l'utilizzo della memoria dell'istanza di replica. Per isolare la singola attività che consuma più memoria, ordina le attività per MemoryUsage. Per scoprire perché l'attività sta trattenendo memoria, confronta CDCChangesMemorySource e CDCChangesMemoryTarget, quindi risolvi i problemi relativi al rispettivo endpoint.

L'istanza di replica utilizza una memoria minima per eseguire il motore di replica. Per verificare se è possibile eseguire ulteriori attività AWS DMS sull'istanza di replica, esamina il parametro AvailableMemory in Amazon CloudWatch. Quindi, crea una nuova attività per utilizzare la quantità di FreeMemory disponibile. Quando esegui l'attività AWS DMS, monitora FreeMemory e SwapUsage per vedere se il conflitto di risorse è un problema. Per ulteriori informazioni, consulta Parametri delle istanze di replica.

Evita i problemi di memoria

Per valutare correttamente la quantità di memoria utilizzata dall'attività AWS DMS, la best practice consiste nel testare un'istanza con la stessa configurazione in un ambiente inferiore (sviluppo e staging).

Inoltre, esegui una migrazione del proof of concept prima di lavorare con i dati di produzione.


Questo articolo è stato utile?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?