Passer au contenu

Comment optimiser l'utilisation de la mémoire AWS DMS pour la migration ?

Lecture de 7 minute(s)
0

J'ai une tâche AWS Database Migration Service (AWS DMS) qui utilise plus ou moins de mémoire que prévu. Je souhaite optimiser l'utilisation de la mémoire de mon instance de réplication.

Brève description

Une instance de réplication AWS DMS utilise la mémoire pour exécuter le moteur de réplication. Ce moteur exécute des instructions SELECT sur le moteur source pendant la phase de chargement complet. En outre, le moteur de réplication lit le journal de transactions du moteur source pendant la phase de capture de données modifiées (CDC). AWS DMS migre ces enregistrements vers la cible, puis les compare aux enregistrements correspondants de la base de données cible pendant le processus de validation.

AWS DMS utilise également la mémoire pour la configuration des tâches et pour le flux de données de la source à la cible.

Résolution

Optimiser la mémoire pour les tâches ayant des paramètres LOB limités

Lorsque vous utilisez une tâche AWS DMS avec des paramètres LOB (Large Binary Object) limités pour migrer des données, AWS DMS alloue de la mémoire en fonction du paramètre LobMaxSize pour chaque colonne LOB. Si vous définissez une valeur trop élevée, votre tâche peut échouer. Cet échec est dû à une erreur « Out of Memory (OOM) » (Mémoire insuffisante (OOM)), basée sur le nombre d'enregistrements que vous migrez et le taux de validation (CommitRate).

Si vous configurez votre tâche avec des valeurs élevées, vérifiez vos paramètres de tâche pour vous assurer que l'instance AWS DMS dispose d’une quantité suffisante de mémoire.

Exemples de paramètres de tâche JSON :

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

Pour plus d'informations, consultez la section Configuration de la prise en charge LOB pour les bases de données source dans une tâche AWS DMS.

Optimiser la mémoire pour les tâches avec ValidationEnabled

Si vous utilisez une tâche AWS DMS dont le paramètre ValidationEnabled=True est défini pendant la migration, une utilisation de mémoire supplémentaire peut se produire. Cela se produit car AWS DMS extrait les enregistrements ThreadCount et PartitionSize des bases de données source et cible. Puis, AWS DMS compare les données correspondantes sur l'instance de réplication. Vous constatez donc une utilisation de mémoire supplémentaire sur l'instance de réplication, la base de données source et la base de données cible lors de la migration.

Pour limiter la quantité de mémoire utilisée, utilisez SkipLobColumns pour ignorer les colonnes LOB. Vous pouvez également effectuer la validation séparément de la tâche de migration si vous utilisez une instance de réplication ou une tâche AWS DMS distincte. Pour ce faire, utilisez le paramètre ValidationOnly :

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

Pour plus d'informations, consultez la section Validation des données AWS DMS.

Optimiser la mémoire pour les tâches avec des threads parallèles en phase de pleine charge et en phase CDC

Lorsque vous utilisez une cible de base de données non relationnelle (SGBDR), ParallelLoadThreads et ParallelLoadBufferSize déterminent le nombre de threads et la taille du transfert de données vers la cible. ParallelApplyThreads et ParallelApplyBufferSize déterminent le nombre de threads et la taille du transfert de données pendant la phase CDC. AWS DMS conserve les données que vous extrayez de la source dans ParallelLoadQueuesPerThread et ParallelApplyQueuesPerThread. Lorsque vous définissez ces paramètres, assurez-vous que l'instance et la cible AWS DMS sont en mesure de gérer la charge de travail.

Exemples de paramètres :

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

Pour plus d'informations sur ces paramètres, consultez la section Paramètres de tâche de métadonnées cible.

Optimiser la mémoire pour les tâches grâce aux paramètres d'application par lots

Lorsque vous utilisez une tâche AWS DMS avec des paramètres d'application par lots, la configuration par lots par défaut peut gérer la charge de travail normale. Dans le traitement par lots, les paramètres BatchApplyTimeoutMin, BatchApplyTimeoutMax et BatchApplyMemoryLimit déterminent la taille du lot et la fréquence d'application du lot sur la cible. Ces paramètres fonctionnent ensemble pour appliquer les modifications par lots. Si vous devez ajuster ces paramètres en raison d'une charge de travail importante sur la source, assurez-vous que l'instance AWS DMS dispose d’une quantité suffisante de mémoire. Sinon, une erreur OOM pourrait se produire.

Assurez-vous de ne pas définir BatchApplyMemoryLimit à une taille supérieure à la taille de la mémoire de l'instance de réplication. Sinon, une erreur OOM pourrait se produire. Notez les autres tâches qui s'exécutent simultanément avec la tâche AWS DMS que vous utilisez pour la migration lorsque vous définissez BatchApplyMemoryLimit.

Si vous définissez BatchApplyPreserveTransaction sur vrai pour plusieurs lots, AWS DMS conserve les transactions de longue durée en mémoire. Cela peut également provoquer des erreurs OOM, en fonction des paramètres de mémoire.

Pour définir le nombre de modifications à inclure dans chaque lot et pour limiter la consommation de mémoire, utilisez le paramètre BatchSplitSize.

Exemples de paramètres :

{
  "TargetMetadata": {
    "BatchApplyEnabled": false,
  },
},
  "ChangeProcessingTuning": {
    "BatchApplyPreserveTransaction": true,
    "BatchApplyTimeoutMin": 1,
    "BatchApplyTimeoutMax": 30,
    "BatchApplyMemoryLimit": 500,
    "BatchSplitSize": 0,
  },

Utiliser les paramètres de tâche liés à la mémoire

Au cours de la phase CDC, MinTransactionSize détermine le nombre de changements qui se produisent dans chaque transaction. MemoryLimitTotal contrôle la taille des transactions sur l'instance de réplication. Lorsque vous exécutez plusieurs tâches CDC nécessitant beaucoup de mémoire, utilisez ces paramètres avec des valeurs basées sur la charge de travail transactionnelle de chaque tâche.

Pour limiter la quantité de mémoire consommée par les transactions de longue durée effectuées sur la source, utilisez le paramètre MemoryKeepTime. Ou, si des lots d'instructions INSERT ou UPDATE volumineux sont exécutés sur la source, augmentez cette durée. Augmentez cette durée pour conserver les modifications en cours de traitement dans le tableau de modifications nettes.

Pour contrôler le nombre d'instructions préparées qu'AWS DMS stocke sur l'instance de réplication, utilisez le paramètre StatementCacheSize.

Si votre instance de réplication AWS DMS contient un volume important de mémoire libre, réglez les paramètres de la même manière que dans l'exemple suivant :

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

Cet exemple utilise des paramètres qui permettent à AWS DMS de gérer lui-même la charge de travail en mémoire. Cela signifie qu'AWS DMS n'est pas fréquemment envoyé vers le stockage.

Pour plus d'informations sur ces paramètres, consultez la section Modifier les paramètres de réglage du traitement.

Surveiller l'utilisation de la mémoire de votre instance de réplication

Pour surveiller l'utilisation de la mémoire de votre instance de réplication, triez vos tâches par MemoryUsage afin d'isoler la tâche qui consomme le plus de mémoire. Pour savoir pourquoi la tâche conserve de la mémoire, comparez CDCChangesMemorySource et CDCChangesMemoryTarget. Puis, résolvez le problème lié au point de terminaison respectif.

L'instance de réplication utilise un minimum de mémoire pour exécuter le moteur de réplication. Pour vérifier si d'autres tâches AWS DMS peuvent être exécutées sur l'instance de réplication, consultez la métrique AvailableMemory dans Amazon CloudWatch. Puis, créez une nouvelle tâche pour utiliser la quantité de FreeMemory disponible. Lorsque vous exécutez la tâche AWS DMS, surveillez FreeMemory et SwapUsage pour voir si la contention des ressources est un problème. Pour plus d'informations, consultez la section Métriques d’instance de réplication.

Tester l'utilisation de la mémoire

Pour évaluer la quantité de mémoire utilisée par votre tâche AWS DMS, testez une instance avec la même configuration dans un environnement de développement ou de test.

Effectuez une migration de preuve de concept avant de migrer les données de production.

Informations connexes

Choisir l'instance de réplication AWS DMS adaptée à votre migration

Sélection de la taille optimale pour une instance de réplication

AWS OFFICIELA mis à jour il y a 8 mois