¿Cómo puedo utilizar la función de aplicación por lotes de DMS para mejorar el rendimiento de replicación de la CDC?

9 minutos de lectura
0

Estoy ejecutando una tarea de carga completa y captura de datos de cambio (CDC) de AWS Database Migration Service (AWS DMS). La latencia de origen no es alta, pero la latencia de destino es alta o está aumentando. ¿Cómo puedo acelerar la fase de replicación de la CDC?

Descripción breve

AWS DMS utiliza los siguientes métodos para replicar los datos en la fase de captura de datos de cambio (CDC):

  • Aplicación transaccional
  • Aplicación por lotes

De forma predeterminada, el proceso de CDC de AWS DMS es de un solo subproceso (se aplica transaccionalmente). Este es el mismo método que se utiliza para la replicación de SQL y para todos los demás motores de bases de datos de procesamiento transaccional en línea (OLTP). La replicación de CDC de DMS depende de los registros de transacciones de la base de datos de origen. Durante la fase de replicación continua, DMS aplica los cambios mediante un método de aplicación transaccional, de la siguiente manera:

  1. DMS lee los cambios del registro de transacciones, del origen a la memoria de la instancia de base de datos de replicación.
  2. DMS traduce los cambios y, a continuación, los pasa a un componente clasificador.
  3. El componente clasificador ordena las transacciones en orden de confirmación y, a continuación, las reenvía al destino de forma secuencial.

Si la tasa de cambio es alta en la base de datos de origen, este proceso puede llevar tiempo. Es posible que observe un aumento en las métricas de latencia de destino de la CDC cuando DMS reciba una gran carga de trabajo entrante de la base de datos de origen.

DMS utiliza un método de replicación de un solo subproceso para procesar los cambios de la CDC. DMS proporciona la configuración de nivel de tarea BatchApplyEnabled para procesar rápidamente los cambios en un destino mediante lotes. BatchApplyEnabled es útil si tiene una gran carga de trabajo en la base de datos de origen y una tarea con una latencia de CDC de destino alta. De forma predeterminada, DMS desactiva BatchApplySetting. Puede activar dicha configuración mediante la Interfaz de la línea de comandos de AWS (AWS CLI).

Cómo funciona la aplicación por lotes

Si ejecuta una tarea con BatchApplyEnabled, DMS procesa los cambios de la siguiente manera:

  1. DMS recopila los cambios por lotes de los registros de transacciones de la base de datos de origen.
  2. DMS crea una tabla denominada tabla de cambios netos, con todos los cambios del lote.
  3. Esta tabla reside en la memoria de la instancia de base de datos de replicación y se transfiere a la instancia de base de datos de destino.
  4. DMS aplica un algoritmo de cambios netos que elimina todos los cambios de la tabla de cambios netos en la tabla de destino real.

Por ejemplo, si ejecuta una tarea de DMS con BatchApplyEnabled y tiene una nueva inserción de fila, diez actualizaciones en esa fila y una eliminación para esa fila en un solo lote, DMS elimina todas estas transacciones y no las transfiere. Esto se debe a que la fila finalmente se elimina y ya no existe. Este proceso reduce la cantidad de transacciones reales que se aplican al destino.

BatchApplyEnabled aplica el algoritmo de cambios netos en el nivel de fila de una tabla dentro de un lote de una tarea determinada. Por lo tanto, si la base de datos de origen presenta cambios frecuentes (update, delete e insert) o una combinación de esas cargas de trabajo en las mismas filas, puede obtener un uso óptimo de BatchApplyEnabled. Esto minimiza los cambios que se aplicarán al destino. Si el lote recopilado es único en cuanto a los cambios (cambios de update, delete o insert para diferentes registros de filas), el proceso del algoritmo de la tabla de cambios netos no puede filtrar ningún evento. Como resultado, todos los eventos por lotes se aplican al destino en modo por lotes. Las tablas deben tener una clave principal o una clave única para que la aplicación por lotes funcione.

DMS también proporciona la configuración BatchApplyPreserveTransaction para ajustar el procesamiento de cambios. Si activa BatchApplyEnabled, BatchApplyPreserveTransaction se activa de forma predeterminada. Si establece la configuración en true, se preserva la integridad transaccional. Se garantiza que un lote contendrá todos los cambios de una transacción desde el origen. Esta configuración solo se aplica a los puntos de conexión de destino de Oracle.

Nota: Preste atención a las ventajas y desventajas de esta configuración. Cuando la configuración BatchApplyPreserveTransaction es true, DMS captura toda la transacción de ejecución prolongada en la memoria de la instancia de base de datos de replicación. Lo hace de acuerdo con las configuraciones MemoryLimitTotal y MemoryKeepTime de la tarea, y las intercambia según sea necesario, antes de enviar los cambios a la tabla de cambios netos. Si la configuración BatchApplyPreserveTransaction es false, los cambios de una sola transacción pueden abarcar varios lotes. Esto puede provocar la pérdida de datos cuando se aplica parcialmente, por ejemplo, debido a la falta de disponibilidad de la base de datos de destino.

Para obtener más información sobre la latencia de DMS y el proceso de aplicación por lotes, consulte la Parte 2 y la Parte 3 de los blogs sobre depuración de migraciones de AWS DMS.

Casos de uso de la aplicación por lotes

Puede utilizar la aplicación por lotes en las siguientes circunstancias:

  • La tarea tiene un gran número de transacciones capturadas del origen y esto provoca la latencia de destino.
  • La tarea tiene una carga de trabajo desde el origen que consiste en insertar, actualizar y eliminar en las mismas filas.
  • No es necesario mantener una estricta integridad referencial en el destino (FK deshabilitadas).

Limitaciones

La aplicación por lotes tiene actualmente las siguientes limitaciones**:**

  • El destino de Amazon Redshift utiliza la aplicación por lotes de forma predeterminada. El destino de Amazon Simple Storage Service (Amazon S3) está obligado a utilizar la aplicación transaccional.
  • La aplicación por lotes solo puede funcionar en tablas con clave principal o índice único. En el caso de tablas sin clave principal o índice único, la aplicación masiva solo aplicará la inserción en modo masivo, pero realizará actualizaciones y eliminaciones una por una. Si la tabla tiene una clave principal o un índice único, pero se observa un cambio de modo uno por uno, consulte ¿Cómo puedo solucionar los problemas por los que Amazon Redshift cambió al modo uno por uno porque falló una operación masiva durante una tarea de AWS DMS?
  • Cuando las columnas de LOB se incluyen en la replicación, solo puede usar BatchApplyEnabled en modo LOB limitado. Para obtener más información, consulte Configuración de tareas de metadatos de destino.
  • Cuando BatchApplyEnabled se establece en true, AWS DMS genera un mensaje de error si la tabla de destino tiene una restricción única.

Resolución

Nota: Si recibe errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de utilizar la versión más reciente de AWS CLI.

La configuración BatchApplySetting está deshabilitada de forma predeterminada. Puede activar esta configuración mediante AWS CLI o la consola de AWS DMS. Realice las siguientes tareas de configuración en el sistema antes de habilitar la configuración por lotes:

Compruebe el estado de la configuración por lotes de una tarea existente

  1. Abra la consola de AWS DMS.
  2. En el panel de navegación, seleccione Tareas de migración de base de datos
  3. Elija su tarea y, a continuación, elija Configuración de tareas (JSON). En el JSON, BatchApplyEnabled aparece en estado deshabilitado.

Activar la configuración por lotes mediante AWS CLI

  1. Abra el sistema en el que se ha instalado AWS CLI.
  2. Ejecute el comando aws configure para abrir la línea de comandos de AWS CLI.
  3. Introduzca su ID de clave de acceso a AWS y, a continuación, pulse Entrar.
  4. Introduzca su ID de clave secreta de AWS y, a continuación, pulse Entrar.
  5. Introduzca el nombre de la región de sus recursos de DMS y, a continuación, pulse Entrar.
  6. Introduzca el formato de salida y, a continuación, pulse Entrar.
  7. Ejecute el comando modify-replication-task con el ARN de la tarea y las condiciones de configuración por lotes.

Nota: Confirme que la tarea se encuentra en estado detenido antes de modificar la tarea. Cambie el ARN del siguiente comando en función de la tarea y, a continuación, ejecútelo para cambiar la configuración de la tarea.

Cuando el comando se haya ejecutado correctamente en AWS CLI, abra la consola de DMS y vuelva a comprobar el estado de la configuración por lotes de la tarea. La configuración BatchApplyEnabled ahora aparece como «activada» en Configuración de tareas (JSON).

Ahora puede iniciar la tarea de DMS y observar el rendimiento de la migración.

aws dms modify-replication-task --replication-task-arn arn:aws:dms:us-east-1:123456789123:task:4VUCZ6ROH4ZYRIA25M3SE6NXCM --replication-task-settings "{\"TargetMetadata\":{\"BatchApplyEnabled\":true}}"

Activar la configuración por lotes mediante la consola de AWS DMS

  1. Abra la consola de AWS DMS.
  2. En el panel de navegación, seleccione Tarea de migración de base de datos.
  3. Elija la tarea y, a continuación, elija Modificar.
  4. En la sección Configuración de tareas, seleccione Editor de JSON.
  5. Modifique la configuración de la tarea que desee cambiar. Por ejemplo, en la sección TargetMetadata,, cambie BatchApplyEnabled a true (el valor predeterminado es false).
  6. Haga clic en Guardar para modificar la tarea.

Compruebe que los cambios hayan surtido efecto siguiendo estos pasos:

  1. En la página Lista de tareas, seleccione la tarea que modificó.
  2. En la pestaña Detalles de información general, expanda Configuración de tareas (JSON).
  3. Revise la configuración de la tarea.

Solucionar problemas de valores de CDCLatencyTarget altos después de ejecutar la tarea en modo por lotes

Si el valor de CDCLatencyTarget es alto después de ejecutar la tarea en modo por lotes, la latencia podría deberse a lo siguiente:

  • Transacción de larga duración en el destino debido a la falta de un índice primario y secundario
  • Disponibilidad de recursos insuficiente para procesar la carga de trabajo en el destino
  • Alta contención de recursos en la instancia de replicación de DMS

Siga las prácticas recomendadas de DMS para solucionar estos problemas.


Información relacionada

Supervisar tareas de AWS DMS

Cómo programar una migración de base de datos

Automatizar las tareas de migración de AWS DMS

¿Cómo creo puntos de conexión de origen o destino con AWS DMS?

Configuración de ajuste del procesamiento de cambios

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años