Pourquoi ma tâche AWS DMS qui utilise PostgreSQL comme source échoue-t-elle alors que tous les emplacements de réplication sont en cours d'utilisation ?

Date de la dernière mise à jour : 01/10/2019

J'ai une tâche AWS Database Migration Service (AWS DMS) qui utilise une instance de base de données Amazon Relational Database Service (Amazon RDS) qui exécute PostgreSQL comme source. Ma tâche échoue, tous les emplacements de réplication sont en cours d'utilisation et j'ai reçu un message d'erreur. Pourquoi ma tâche échoue-t-elle et comment résoudre ces erreurs ?

Brève description

Pour les instances de base de données RDS qui exécutent PostgreSQL, AWS DMS utilise des emplacements de réplication natifs afin d'effectuer la réplication logique pour la capture des données modifiées (CDC), c'est-à-dire la réplication continue en cours.

Le nombre d'emplacements de réplication que possède une instance PostgreSQL est contrôlé par le paramètre max_replication_slots. Il existe par défaut cinq emplacements de réplication pour les instances de base de données RDS qui exécutent PostgreSQL. Si vous dépassez le nombre maximal d'emplacements de réplication, vous verrez apparaître des entrées de journal similaires à ce qui suit :

Messages
[SOURCE_CAPTURE  ]E:  Failed (retcode -1) to execute statement [1022502]  (ar_odbc_stmt.c:2579)
[SOURCE_CAPTURE  ]E: RetCode: SQL_ERROR  SqlState: 53400 NativeError: 1 Message: ERROR: all replication slots are in use;

Afin de résoudre ces erreurs, supprimez les emplacements de réplication utilisés ou augmentez la valeur du paramètre max_replication_slots.

Solution

Suppression des emplacements de réplication utilisés

Si vous exécutez plusieurs tâches AWS DMS ou si vous avez d'anciennes tâches en cours d'exécution sur la même instance de base de données, supprimez les emplacements de réplication utilisés qui continuent à occuper de l'espace afin que les emplacements soient disponibles pour de nouvelles tâches. Identifiez tout d'abord le nombre maximal d'emplacements de réplication. Ensuite, supprimez ou « écartez » les emplacements de réplication utilisés afin qu'ils puissent être réutilisés par une nouvelle tâche.

Exécutez la requête suivante afin de vérifier le nombre maximal d'emplacements de réplication :

SELECT * FROM pg_replication_slots;

    slot_name    |    plugin     | slot_type | datoid | database | active |  xmin  | catalog_xmin | restart_lsn

-----------------+---------------+-----------+--------+----------+--------+--------+--------------+-------------

old_and_used_slot | test_decoding | logical   |  12052 | postgres | f      |        |          684 | 0/16A4408

Exécutez la requête suivante afin de supprimer un emplacement de réplication utilisé :

SELECT pg_drop_replication_slot('old_and_used_slot');

Remarque : remplacez old_and_used_slot par le nom de votre emplacement de réplication.

Augmentation de la valeur du paramètre max_replication_slots

Modifiez le paramètre de base de données dans le groupe de paramètres de base de données personnalisé joint à l'instance de base de données Amazon RDS pour augmenter la valeur du paramètre max_replication_slots. Ce paramètre est statique. Vous devez donc redémarrer l'instance de base de données après avoir modifié la valeur du paramètre.

Après avoir supprimé les emplacements de réplication utilisés ou augmenté la valeur du paramètre max_replication_slots, redémarrez la tâche AWS DMS.


Cette page vous a-t-elle été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?