Comment le service AWS DMS utilise-t-il la mémoire 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. Comment le service AWS DMS utilise-t-il la mémoire pour la migration et comment puis-je optimiser l'utilisation de la mémoire de mon instance de réplication ?

Brève description

Une instance de réplication AWS DMS utilise de la mémoire pour exécuter le moteur de réplication. Ce moteur est chargé d'exécuter les instructions SELECT sur le moteur source pendant la phase de pleine charge. En outre, le moteur de réplication lit le journal des transactions du moteur source pendant la phase de capture des données de modification (CDC). Ces enregistrements sont transférés vers la cible, puis comparés aux enregistrements correspondants de la base de données cible dans le cadre du processus de validation. Voici comment fonctionne le flux de migration générique dans AWS DMS.

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.

Solution

Tâches avec des paramètres LOB limités

Lorsque vous transférez des données à l'aide d'une tâche AWS DMS avec des paramètres LOB limités, la mémoire est allouée à l'avance en fonction de la taille LobMaxSize pour chaque colonne LOB. Si vous définissez cette valeur trop élevée, votre tâche risque d'échouer. Cet échec se produit en raison d'une erreur OOM (Out of Memory), en fonction du nombre d'enregistrements que vous faites migrer et du CommitRate.

Par conséquent, si vous configurez votre tâche avec des valeurs élevées, assurez-vous que l'instance AWS DMS dispose de suffisamment de mémoire.

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

Pour en savoir plus, reportez-vous à Définition de la prise en charge LOB pour les bases de données sources dans une tâche AWS DMS.

Tâches avec ValidationEnabled

Lorsque vous effectuez une migration à l'aide d'une tâche AWS DMS avec la valeur ValidationEnabled=true, vous pouvez constater une utilisation supplémentaire de la mémoire. Cela se produit parce que le service AWS DMS extrait les enregistrements ThreadCount * PartitionSize des bases de données source et cible. Il compare ensuite les données correspondantes sur l'instance de réplication. Ainsi, vous observez une utilisation supplémentaire de la mémoire 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, ignorez les colonnes LOB à l'aide de SkipLobColums. Vous pouvez également effectuer la validation séparément de la tâche de migration en utilisant 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, référez-vous à Validation des données AWS DMS.

Tâches avec threads parallèles en phases de pleine charge et CDC

Lorsque vous utilisez une cible non-RDBMS, alors ParallelLoadThreads * ParallelLoadBufferSize détermine le nombre de threads et la taille du transfert de données vers la cible. De même, ParallelApplyThreads * ParallelApplyBufferSize détermine le nombre de threads et la taille du transfert de données pendant la phase CDC. AWS DMS contient les données extraites de la source dans ParallelLoadQueuesPerThread et ParallelApplyQueuesPerThread. Lors du réglage de ces paramètres, assurez-vous que l'instance et la cible AWS DMS ont la capacité de gérer la charge de travail.

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

Pour plus d'informations sur ces paramètres, voir Paramètres des tâches de métadonnées de cible.

Tâches avec des paramètres d'application par lots

Lorsque vous utilisez une tâche AWS DMS avec des paramètres d'application par lots, adoptez les bonnes pratiques suivantes :

  • La configuration par lots par défaut est toujours suffisante pour gérer la charge de travail normale. Dans le traitement par lots, la taille du lot et la fréquence à laquelle il est appliqué sur la cible sont déterminées par les paramètres BatchApplyTimeoutMin, BatchApplyTimeoutMax et BatchApplyMemoryLimit. Ces paramètres fonctionnent ensemble pour appliquer les modifications par lots. Si vous devez régler ces paramètres en raison d'une charge de travail importante sur la source, assurez-vous que l'instance AWS DMS dispose de suffisamment de mémoire. Dans le cas contraire, une erreur OOM peut se produire.
  • Ne définissez pas BatchApplyMemoryLimit sur une taille supérieure à la taille de la mémoire de l'instance de réplication, sinon une erreur OOM pourrait se produire. Soyez conscient des 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.
  • Les transactions de longue durée sont conservées en mémoire si BatchApplyPreserveTransaction = true sur plusieurs lots. Cela peut également entraîner des erreurs OOM, en fonction des paramètres de mémoire de la section suivante.
  • Utilisez le paramètre BatchSplitSize pour définir le nombre de modifications à inclure dans chaque lot et pour limiter la consommation de mémoire :
{
  "TargetMetadata": {
    "BatchApplyEnabled": false,
  },
},
  "ChangeProcessingTuning": {
    "BatchApplyPreserveTransaction": true,
    "BatchApplyTimeoutMin": 1,
    "BatchApplyTimeoutMax": 30,
    "BatchApplyMemoryLimit": 500,
    "BatchSplitSize": 0,
  },

Pour plus d'informations sur l'utilisation du mode d'application par lots, voir Modifier les paramètres de réglage du traitement.

Autres paramètres de tâches liés à la mémoire

  • Au la phase CDC, MinTransactionSize détermine le nombre de modifications apportées à chaque transaction. La taille des transactions sur l'instance de réplication est contrôlée par MemorylimitTotal. Utilisez ce paramètre lorsque vous exécutez plusieurs tâches CDC nécessitant beaucoup de mémoire. Veillez à répartir ce paramètre en fonction de la charge de travail transactionnelle de chaque tâche.
  • Définissez MemoryKeepTime pour limiter la mémoire consommée par les transactions de longue durée sur la source. Ou, si un grand nombre d'instructions INSERT ou UPDATE sont exécutées sur la source, augmentez cette durée. Augmentez ce délai pour conserver les modifications résultant du traitement dans le tableau des variations nettes.
  • Définissez StatementCacheSize pour contrôler le nombre d'instructions préparées qui sont stockées sur l'instance de réplication.
  • Si votre instance de réplication AWS DMS contient un volume important de mémoire libre, réglez les paramètres dans cet exemple. Cela signifie que le service AWS DMS gère la charge de travail en mémoire lui-même, au lieu de la transférer fréquemment vers le stockage AWS DMS.
"ChangeProcessingTuning": {
    "MinTransactionSize": 1000,
    "CommitTimeout": 1,
    "MemoryLimitTotal": 1024,
    "MemoryKeepTime":
  60,
    "StatementCacheSize": 50
  },

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

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

Il existe plusieurs méthodes pour surveiller l'utilisation de la mémoire de votre instance de réplication. Pour isoler la tâche qui consomme le plus de mémoire, triez vos tâches par MemoryUsage. Pour savoir pourquoi la tâche retient de la mémoire, comparez CDCChangesMemorySource et CDCChangesMemoryTarget, puis dépannez le point de terminaison respectif.

L'instance de réplication elle-même utilise un minimum de mémoire pour exécuter le moteur de réplication. Pour vérifier si des tâches AWS DMS supplémentaires peuvent être exécutées sur l'instance de réplication, examinez la métrique AvailableMemory dans Amazon CloudWatch. Ensuite, créez une 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 le conflit des ressources pose problème. Pour plus d'informations, voir Métriques des instances de réplication.

Éviter les problèmes de mémoire

Pour évaluer correctement la quantité de mémoire utilisée par votre tâche AWS DMS, testez une instance avec la même configuration dans un environnement inférieur (développement et simulation).

Effectuez également une migration de preuve de concept avant de travailler avec les données de production.


informations connexes

Choisir la bonne instance de réplication AWS DMS pour votre migration

Choix de la meilleure taille pour une instance de réplication

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans