Quiero usar una tarea de AWS Database Migration Service (AWS DMS) para migrar datos a Amazon Redshift. Sin embargo, mi tarea tiene problemas de latencia o incoherencia de datos y veo entradas de registro como «Error en la operación de aplicación de XXXXBulk. Intentando ejecutar instrucciones masivas en modo «uno por un» XXXXX».
Descripción corta
Amazon Redshift es un almacén de datos de procesamiento analítico en línea (OLAP) que no está diseñado para aceptar transacciones frecuentes debido a los costes. De forma predeterminada, AWS DMS usa el modo de aplicación por lotes para procesar los cambios en lotes. Si Redshift se ejecuta en modo uno por uno, la tarea de DMS no aplicó cambios al objetivo y provocó problemas de latencia o inconsistencia de los datos. Cuando utiliza el modo de aplicación por lotes, AWS DMS hace lo siguiente:
- Recopila los cambios de un lote que controla la configuración de aplicación por lotes.
- Crea una tabla de cambios netos que contiene todos los cambios del lote a la instancia objetivo.
- Utiliza un algoritmo que agrupa las transacciones y las aplica de forma masiva al objetivo.
Cuando una tarea de migración que replica datos en Amazon Redshift no puede aplicar un lote, AWS DMS no falla en todo el lote. AWS DMS desglosa el lote y cambia al modo uno por uno para aplicar las transacciones. Cuando AWS DMS encuentra la transacción que provocó el error del lote, la registra en la tabla awsdms_apply_exceptions del objetivo de Amazon Redshift. A continuación, AWS DMS aplica las demás transacciones del lote una por una hasta que todas las transacciones de ese lote se apliquen al objetivo. Por último, AWS DMS vuelve al modo de aplicación por lotes para un nuevo lote y continúa usando la aplicación por lotes a menos que otro lote falle.
Resolución
Para ver si el lote falló y AWS DMS usó el modo uno por uno, consulte el registro de tareas de AWS DMS. Cada vez que se produce un error en un lote y AWS DMS cambia al modo uno por uno, aparece la siguiente entrada de registro:
«[TARGET_APPLY ]I: Error en la operación de aplicación masiva. Intentando ejecutar instrucciones masivas en modo «uno por uno» (bulk_apply.c:2175)»
Cuando esto ocurre, AWS DMS aplica las transacciones de forma secuencial al objetivo hasta que AWS DMS detecte un problema con alguna transacción del lote. Si AWS DMS detecta un problema, registra la transacción y aparece una entrada de registro similar a la siguiente:
«[TARGET_APPLY ]W: Los cambios de origen que no habrían tenido ningún impacto no se aplicaron a la base de datos objetivo. Consulte la tabla 'awsdms_apply_exceptions' para obtener más información. (endpointshell.c:5984)»
Nota: A menos que especifique un esquema de tabla de control en la configuración de tareas de AWS DMS, la tabla awsdms_apply_exceptions se crea en el esquema público de forma predeterminada.
Una vez que AWS DMS registra la transacción, completa la aplicación de todas las transacciones de ese lote. A continuación, AWS DMS vuelve a cambiar a aplicación por lotes. En los registros, verá un mensaje similar al siguiente:
«[TARGET_APPLY ]I: Vuelva al modo de aplicación masiva (bulk_apply.c:4751)»
Los cambios transaccionales que ejecuta desde una base de datos de procesamiento de transacciones en línea (OLTP) pueden afectar al rendimiento de Amazon Redshift. Cuando se produce un error en la aplicación por lotes, AWS DMS cambia al modo uno por uno. La latencia objetivo aumenta durante el tiempo que AWS DMS ejecuta las transacciones en modo uno por uno. Una vez que AWS DMS vuelva a la aplicación masiva, la latencia objetivo se reduce.
Para resolver este problema, conéctese al objetivo de Amazon Redshift. A continuación, ejecute el siguiente comando para obtener el resultado de la tabla awsdms_apply_exceptions e identificar la consulta que provocó el error del lote:
select * from public.awsdms_apply_exceptions order by 4 desc;
Cuando encuentre la consulta que provocó el error del lote, revise el error. Resuelva el problema para que las tareas no pasen al modo uno por uno.
Información relacionada
Depuración de las migraciones de AWS DMS: ¿qué hacer cuando las cosas van mal?
Uso de una base de datos de Amazon Redshift como objetivo para AWS Database Migration Service