Comment puis-je utiliser la fonctionnalité d'application par lots DMS pour améliorer les performances de réplication CDC ?

Dernière mise à jour : 24/08/2020

J'exécute une tâche AWS Database Migration Service (AWS DMS) de chargement complet et de capture de données modifiées (CDC). La latence source n'est pas élevée, mais la latence cible est élevée ou elle augmente. Comment puis-je accélérer la phase de réplication CDC ?

Brève description

AWS DMS utilise les méthodes suivantes pour répliquer les données dans la phase de capture de données modifiées (CDC) :

  • Application transactionnelle
  • Application par lots

Le processus CDC d'AWS DMS est à thread unique, par défaut (application transactionnelle). Il utilise la même méthode pour la réplication SQL que tous les autres moteurs de base de données OLTP (Online Transactional Processing). La réplication CDC de DMS dépend entièrement des journaux de transactions de la base de données source. Au cours de la phase de réplication, DMS applique les modifications à l'aide d'une méthode d'application transactionnelle comme suit :

  1. DMS lit les modifications à partir du journal des transactions, de la source dans la mémoire de l'instance de base de données de réplication.
  2. DMS traduit les modifications, puis les transmet à un composant trieur.
  3. Le composant trieur trie les transactions dans l'ordre de validation, puis les transmet à la cible, de manière séquentielle.

Si le taux de changement est élevé sur la base de données source, ce processus peut prendre du temps. Vous pouvez observer un pic dans les métriques de latence cible CDC lorsque DMS reçoit une charge de travail entrante élevée de la base de données source.

DMS utilise une méthode de réplication à thread unique pour traiter les modifications CDC. DMS fournit le paramètre de niveau de tâche BatchAPPLYEnabled pour traiter rapidement les modifications sur une cible à l'aide de lots. BatchApplySetting est utile si vous avez une charge de travail élevée sur la base de données source et une tâche avec une latence CDC cible élevée. Par défaut, DMS désactive BatchApplySetting. Vous pouvez l'activer à l'aide de l'interface de ligne de commande AWS (AWS CLI).

Fonctionnement de l'application par lots

Si vous exécutez une tâche avec BatchApplyEnabled, DMS traite les modifications de la manière suivante :

  1. DMS collecte les modifications dans le lot à partir des journaux de transactions de base de données source.
  2. DMS crée une table appelée table des modifications nettes, avec toutes les modifications du lot.
  3. Cette table réside dans la mémoire de l'instance de base de données de réplication et est transmise à l'instance de base de données cible.
  4. DMS applique un algorithme de modifications nettes qui répertorie toutes les modifications de la table des modifications nettes vers la table cible réelle.

Par exemple, si vous exécutez une tâche DMS avec BatchApplyEnabled et qu'une nouvelle ligne est insérée, 10 mises à jour sont appliquées sur cette ligne et qu'elle est finalement supprimée dans un seul lot, DMS supprime alors toutes ces transactions et ne les reporte pas. Il le fait parce que la ligne est finalement supprimée et n'existe plus. Ce processus réduit le nombre de transactions réelles qui sont appliquées sur la cible.

BatchApplyEnabled applique l'algorithme des modifications nettes au niveau de ligne d'une table au sein d'un lot d'une tâche particulière. Ainsi, si la base de données source reçoit fréquemment des modifications (mise à jour, suppression et insertion) ou une combinaison de ces charges de travail sur les mêmes lignes, vous pouvez alors obtenir une utilisation optimale de BatchApplyEnabled. Cela minimise les modifications à appliquer à la cible. Si le lot collecté est unique dans les modifications (par exemple, mise à jour / suppression / insertion de modifications pour différents enregistrements de ligne), le processus d'algorithme de table de modification nette ne peut pas filtrer les événements, et tous les événements de lot sont appliqués sur la cible en mode de traitement par lots. Les tables doivent avoir une clé primaire ou unique pour que l'application par lots fonctionne.

DMS fournit également le paramètre BatchApplyPreserveTransaction pour le réglage du traitement des modifications. Si vous activez BatchApplySetting, BatchApplyPreserveTransaction est activé par défaut. Si vous le définissez sur true, l'intégrité transactionnelle est préservée et vous avez la garantie qu'un lot contiendra toutes les modifications d'une transaction à partir de la source. Ce paramètre s'applique uniquement aux points de terminaison cibles Oracle.

Remarque : faites attention aux avantages et aux inconvénients de ce paramètre. Lorsque le paramètre BatchApplyPreserveTransaction est true, DMS capture l'intégralité de la transaction longue durée dans la mémoire de l'instance de base de données de réplication. Il le fait conformément aux paramètres de tâche MemoryLimitTotal et MemoryKeepTime, et les échange si nécessaire, avant d'envoyer des modifications à la table des modifications réseau. Lorsque le paramètre BatchApplyPreserveTransaction a la valeur false, les modifications d'une seule transaction peuvent s'étendre sur plusieurs lots. Cela peut entraîner une perte de données en cas d'application partielle, par exemple, en raison de l'indisponibilité de la base de données cible.

Pour en savoir plus sur la latence DMS et le processus d'application par lots, consultez la Partie 2 et la Partie 3 des blogs Débogage de vos migrations AWS DMS.

Cas d'utilisation pour l'application par lots

Vous pouvez utiliser l'application par lots dans les cas suivants :

  • La tâche comporte un nombre élevé de transactions capturées à partir de la source, ce qui génère une latence cible.
  • La tâche possède une charge globale provenant de la source qui est une combinaison d'insertion, de mise à jour et de suppression sur les mêmes lignes.
  • Conserver une intégrité référentielle stricte sur la cible (clés premières désactivées) n'est pas nécessaire.

Limitations

L'application par lots présente actuellement les limites suivantes :

Résolution

BatchApplySetting est désactivé par défaut. Vous ne pouvez activer ce paramètre qu'à l'aide de l'interface de ligne de commande AWS (AWS CLI). Effectuez les tâches de configuration suivantes sur votre système avant d'activer le paramétrage par lots :

Vérifier l'état des paramètres par lots d'une tâche existante

  1. Ouvrez la console AWS DMS.
  2. Sélectionnez Tâches de migration de base de données dans le volet de navigation.
  3. Sélectionnez votre tâche, puis Paramètre de la tâche (JSON). Dans le JSON, BatchApplyEnabled est répertorié avec le statut disabled.

Activer le paramètre par lots

  1. Ouvrez le système installé de l'interface de ligne de commande AWS.
  2. Exécutez la commande aws configure pour entrer dans l'invite de l'interface de ligne de commande.
  3. Saisissez votre ID de clé d'accès AWS, puis appuyez sur Entrée.
  4. Saisissez votre ID de clé secrète AWS, puis appuyez sur Entrée.
  5. Saisissez le nom de région de vos ressources DMS, puis appuyez sur Entrée.
  6. Saisissez le format de sortie, puis appuyez sur Entrée.
  7. Exécutez la commande modify-replication-task avec les conditions de configuration de l'ARN de tâche et par lots.

Remarque : vérifiez que la tâche affiche l'état stopped avant de modifier la tâche. Modifiez l'ARN sur la commande suivante en fonction de votre tâche, puis exécutez-le pour modifier le paramètre de tâche.

Une fois la commande exécutée avec succès dans l'interface de ligne de commande, ouvrez la console DMS et revérifiez le statut des paramètres par lots de votre tâche. BatchApplyEnabled est maintenant répertorié comme activé dans Paramètre de la tâche (JSON).

Vous pouvez maintenant démarrer la tâche DMS et observer les performances de migration.

aws dms modify-replication-task --replication-task-arn arn:aws:dms:us-east-1:123456789123:task:4VUCZ6ROH4ZYRIA25M3SE6NXCM --replication-task-settings "{\"TargetMetadata\":{\"BatchApplyEnabled\":true}}"

Résolution des problèmes liés au CDCLatencyTarget élevé après l'exécution de la tâche en mode batch

Si CDCLatencyTarget est élevé après l'exécution de la tâche en mode batch, la latence peut être due aux éléments suivants :

  • Transaction de longue durée sur la cible en raison de l'absence d'index primaire et secondaire
  • Disponibilité insuffisante des ressources pour traiter la charge de travail sur la cible
  • Conflit de ressources élevé sur l'instance de réplication DMS

Suivez les bonnes pratiques DMS pour résoudre ces problèmes.