Perché rilevo un elevato consumo di storage nel mio database PostgreSQL di origine quando eseguo un'attività AWS DMS CDC?

Ultimo aggiornamento: 25/07/2022

Sto eseguendo un'attività di acquisizione dei dati di modifica (CDC) di AWS Database Migration Service (AWS DMS) e utilizzo un database PostgreSQL come origine. Perché rilevo un elevato consumo di storage nel mio database di origine quando eseguo un'attività AWS DMS CDC?

Breve descrizione

Quando si utilizza PostgreSQL come origine per un'attività CDC, AWS DMS utilizza slot di replica logica, una funzionalità PostgreSQL, per ottenere le modifiche dal database di origine. Questi slot rappresentano un flusso di operazioni che vengono riprodotte nello stesso ordine in cui sono state eseguite nel database di origine PostgreSQL.

In base alla progettazione, gli slot di replica logica riqualificano i registri di traduzione (WAL) richiesti da AWS DMS, anche quando non sono connessi all'origine PostgreSQL. Pertanto, WAL viene rimosso da PostgreSQL solo dopo che AWS DMS ha confermato di aver recuperato le modifiche necessarie dallo slot di replica. AWS DMS conferma di avere le modifiche necessarie facendo avanzare il restart_lsn dello slot di replica.

Cause dell'elevato consumo di storage per un'origine PostgreSQL

A causa del modo in cui PostgreSQL implementa la funzionalità dello slot di replica logica, in alcuni scenari possono verificarsi problemi di volume di archiviazione nel database di origine.

  • L'attività CDC di AWS DMS viene interrotta per un lungo periodo. Ciò significa che AWS DMS non è connesso al database di origine e non sta consumando le modifiche dallo slot di replica per l'origine. Ciò significa che PostgreSQL mantiene continuamente WAL senza eliminare il WAL precedente che non è stato letto da AWS DMS. Quindi, lo spazio di archiviazione sul database di origine alla fine si riempie.
  • Carico di lavoro elevato: i carichi di lavoro elevati che causano una generazione eccessiva di WAL possono anche causare il riempimento dello storage in un database PostgreSQL quando gli slot di replica logica sono in uso. Ciò accade perché il WAL viene ancora mantenuto da PostgreSQL se i numeri di sequenza di registro (LSN) sono richiesti dallo slot di replica.
  • Slot di replica inattivi: anche se una tabella, uno schema o un database da cui AWS DMS sta replicando le modifiche è inattivo, il WAL mantenuto dallo slot di replica contiene ancora informazioni su tale tabella, schema o database. Ciò fa sì che lo spazio di archiviazione si riempia sull'origine, anche se le tabelle non hanno alcuna transazione in corso.

Risoluzione

Controllare se gli slot di replica causano un elevato utilizzo dello spazio su disco nell'origine PostgreSQL

Per verificare se gli slot di replica sono la causa dell'elevato utilizzo dello spazio su disco nel database PostgreSQL, esegui le query elencate in Perché ho ricevuto un errore «No space left on device» (Nessuno spazio sul dispositivo) o «DiskFull» (disco pieno) su Amazon RDS per PostgreSQL?

Nota: molte di queste query possono essere utilizzate su installazioni PostgreSQL autogestite.

Attiva la funzione heartbeat WAL

Attiva la funzione heartbeat WAL di AWS DMS per evitare di consumare storage in un database di origine PostgreSQL. Questa funzione imita una transazione fittizia in modo che gli slot di replica logica inattivi non mantengano i vecchi registri WAL. Questa funzione heartbeat mantiene restart_lsn in movimento e impedisce il riempimento dello spazio di archiviazione sul sorgente PostgreSQL.

Per attivare la funzione heartbeat WAL, aggiungi questo attributo di connessione extra (ECA) all'endpoint di origine PostgreSQL:

heartbeatEnable=Y;

Facoltativamente, specifica le seguenti ECA aggiuntive:

heartbeatFrequency=frequency;heartbeatSchema=schemaname;

heartbeatFrequency determina la frequenza (in minuti) dell'esecuzione della transazione heartbeat sull'origine PostgreSQL. Ad esempio, se imposti heartbeatFrequency su un valore di 15, AWS DMS esegue la transazione heartbeat sull'origine ogni 15 minuti.

heartbeatSchema specifica in quale schema di database AWS DMS crea oggetti di database per generare la transazione heartbeat.

Nota: la transazione heartbeat viene eseguita sull'origine solo se è in esecuzione un'attività AWS DMS. Se le attività di AWS DMS vengono interrotte, la funzione heartbeat di WAL non ha alcun effetto.

Limita le dimensioni di uno slot in PostgreSQL

È possibile applicare max_slot_wal_keep_size nel database di origine in PostgreSQL 13 e versioni successive. Questa opzione consente di impostare la quantità massima di WAL che può essere mantenuta dagli slot di replica.

Nota: l'impostazione max_slot_wal_keep_size può aiutarti a evitare problemi riempimento dello storage sull'origine PostgreSQL. Allo stesso tempo, può anche causare l'eliminazione di WAL dall'origine prima che l'attività CDC di AWS DMS possa leggere le modifiche dallo slot di replica. Questo farà fallire l'attività.