Pourquoi ma tâche AWS DMS utilisant PostgreSQL comme source échoue-t-elle alors que tous les emplacements de réplication sont utilisés ?

Dernière mise à jour : 27/06/2022

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) exécutant 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 Amazon RDS for PostgreSQL, AWS DMS utilise des emplacements de réplication natifs pour effectuer la réplication logique pour la capture des données modifiées (CDC).

Le nombre d'emplacements de réplication que possède une instance PostgreSQL est contrôlé par le paramètre max_replication_slots. Par défaut, il y a cinq emplacements de réplication pour les instances RDS PostgreSQL. Si vous dépassez le nombre maximal d'emplacements de réplication, vous voyez 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;

Pour 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 d'anciennes tâches s'exécutent sur la même instance de bases de données, supprimez les emplacements de réplication utilisés. Ces emplacements de réplication continuent d'occuper de l'espace. Par conséquent, en les supprimant, vous les rendez 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.

Exécutez la requête suivante pour 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 pour écarter 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 les groupes de paramètres de base de données personnalisés attachés à l'instance de base de données Amazon RDS. Augmentez ensuite la valeur du paramètre max_replication_slots. Ce paramètre est statique. Assurez-vous donc de 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.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?