Salta al contenuto

Come posso risolvere il motivo per cui Amazon Redshift è passato alla modalità una alla volta?

4 minuti di lettura
0

Desidero utilizzare un'attività AWS Database Migration Service (AWS DMS) per migrare i dati su Amazon Redshift. Tuttavia, la mia attività presenta problemi di latenza o incoerenza dei dati e vedo voci di log come “XXXXBulk apply operation failed. Trying to execute bulk statements in 'one-by-one' mode XXXXX”.

Breve descrizione

Amazon Redshift è un data warehouse per l'elaborazione analitica online (OLAP) che non è stato progettato per effettuare transazioni frequenti a causa dei costi. Per impostazione predefinita, AWS DMS utilizza la modalità Applica in batch per elaborare le modifiche in batch. Se Redshift viene eseguito in modalità una alla volta, l'attività DMS non applica le modifiche alla destinazione e causa problemi di incoerenza o latenza dei dati. Quando utilizzi la modalità Applica in batch, AWS DMS esegue le seguenti operazioni:

  1. Raccoglie le modifiche da un batch controllato dalle impostazioni di Applica in batch.
  2. Crea una tabella delle modifiche nette che contiene tutte le modifiche dal batch all'istanza di destinazione.
  3. Utilizza un algoritmo che raggruppa le transazioni e le applica in blocco alla destinazione.

Quando un'attività di migrazione che replica i dati su Amazon Redshift non può applicare un batch, AWS DMS non genera un errore per l'intero batch. AWS DMS suddivide il batch e passa alla modalità una alla volta per applicare le transazioni. Quando AWS DMS rileva la transazione che ha causato l'errore del batch, la registra nella tabella awsdms_apply_exceptions nella destinazione di Amazon Redshift. Dopodiché, AWS DMS applica le altre transazioni del batch una alla volta fino a quando tutte le transazioni del batch non sono applicate alla destinazione. Infine, AWS DMS torna alla modalità Applica in batch per un nuovo batch e continua a utilizzare la modalità **Applica in batch ** meno che un altro batch non generi un errore.

Risoluzione

Per verificare se il batch ha generato un errore e AWS DMS ha utilizzato la modalità una alla volta, controlla il log dell'attività AWS DMS. Ogni volta che un batch genera un errore e AWS DMS passa alla modalità una alla volta, viene visualizzata la seguente voce di log:

"[TARGET_APPLY ]I: Bulk apply operation failed. Trying to execute bulk statements in 'one-by-one' mode (bulk_apply.c:2175)"

Quando ciò accade, AWS DMS applica le transazioni in sequenza sulla destinazione fino a quando AWS DMS non riscontra un problema una transazione del batch. Se AWS DMS riscontra un problema, registra la transazione e viene visualizzata una voce di log simile alla seguente:

"[TARGET_APPLY ]W: Source changes that would have had no impact were not applied to the target database. Refer to the 'awsdms_apply_exceptions' table for details. (endpointshell.c:5984)"

Nota: a meno che non specifichi uno schema della tabella di controllo nelle impostazioni dell'attività AWS DMS, per impostazione predefinita, la tabella awsdms_apply_exceptions viene creata nello schema pubblico.

Dopo aver registrato la transazione, AWS DMS completa l'applicazione di tutte le transazioni del batch. Dopodiché, AWS DMS passa nuovamente alla modalità Applica in batch. Nei log compare un messaggio simile al seguente:

"[TARGET_APPLY ]I: Switch back to bulk apply mode (bulk_apply.c:4751)"

Le modifiche transazionali eseguite da un database OLTP (Online Transaction Processing) possono influire sulle prestazioni di Amazon Redshift. Quando la modalità Applica in batch genera un errore, AWS DMS passa alla modalità una alla volta. La latenza della destinazione aumenta per tutta la durata del tempo in cui AWS DMS esegue le transazioni in modalità una alla volta. Dopo che AWS DMS torna alla modalità Applica in batch, la latenza della destinazione diminuisce.

Per risolvere il problema, connettiti alla destinazione di Amazon Redshift. Quindi esegui il seguente comando per ottenere l'output dalla tabella awsdms_apply_exceptions e identificare la query che ha causato l’errore del batch:

select * from public.awsdms_apply_exceptions order by 4 desc;

Dopo aver trovato la query che ha causato l’errore del batch, esaminalo. Risolvi l’errore in modo che le attività non passino alla modalità una alla volta.

Informazioni correlate

Debugging your AWS DMS migrations: What to do when things go wrong (Debug delle migrazioni AWS DMS: cosa fare quando qualcosa va storto)

Utilizzo di un database Amazon Redshift come destinazione per AWS Database Migration Service

AWS UFFICIALEAggiornata 2 anni fa