Perché la mia attività di AWS DMS che utilizza PostgreSQL come sorgente non va a buon fine con tutti gli slot di replica in uso?

3 minuti di lettura
0

Ho un'attività AWS Database Migration Service (AWS DMS) che utilizza un'istanza database Amazon Relational Database Service (Amazon RDS) per PostgreSQL. La mia operazione non va a buon fine, tutti gli slot di replica sono in uso e ho ricevuto un messaggio di errore.

Descrizione breve

Per le istanze Amazon RDS per PostgreSQL, AWS DMS utilizza slot di replica nativi per eseguire la replica logica per l'acquisizione dei dati di modifica (CDC, change data capture).

Il parametro max_replication_slots controlla il numero di slot di replica di cui dispone un'istanza PostgreSQL. Per impostazione predefinita, le istanze RDS per PostgreSQL dispongono di cinque slot di replica. Se superi il numero massimo di slot di replica, vedrai voci di log come le seguenti:

Messaggi
[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;

Per risolvere questi errori, rimuovi gli slot di replica usati o aumenta il valore del parametro max_replication_slots.

Soluzione

Rimozione degli slot di replica usati

Gli slot di replica utilizzati continuano a occupare spazio. Se esegui più attività AWS DMS o disponi di attività precedenti eseguite sulla stessa istanza database, rimuovi gli slot di replica utilizzati.

Innanzitutto, identifica il numero massimo di slot di replica. Quindi, rimuovi gli slot di replica non utilizzati.

Per verificare il numero massimo di slot di replica, esegui la seguente query. Per identificare gli slot di replica non utilizzati, consulta la colonna active:

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

Nota: active: t (true) significa che lo slot è in uso e active: f (false) significa che lo slot non è in uso.

Per rimuovere uno slot di replica inutilizzato, esegui questa query:

SELECT pg_drop_replication_slot('old_and_used_slot');

**Nota:**Sostituisci old_and_used_slot con il nome dello slot di replica.

Dopo aver rimosso gli slot di replica non utilizzati, riavvia l'attività.

Aumento del valore del parametro max_replication_slots

Modifica il parametro database nel gruppo di parametri database personalizzato collegato all'istanza database RDS. Quindi, aumenta il valore del parametro max_replication_slots. Si tratta di un parametro statico, quindi assicurati di riavviare l'istanza database dopo aver modificato il valore del parametro. Poi riavvia l'attività.

Informazioni correlate

Activating change data capture (CDC) using logical replication

Amazon RDS for PostgreSQL

Using a PostgreSQL database as an AWS DMS source

Logical decoding examples sul sito web PostgreSQL