Configuración de la compatibilidad de LOB con bases de datos de origen en una tarea de AWS DMS
A veces, migrar objetos binarios grandes (LOB) entre sistemas resulta complicado. AWS DMS le ofrece una serie de opciones que le ayudarán a ajustar las columnas de LOB. Para saber qué tipos de datos AWS DMS considera como LOB y cuándo lo hace, consulte la documentación de AWS DMS.
Al migrar datos desde una base de datos a otra, puede aprovechar para replantearse la manera en que quiere almacenar los LOB, especialmente en migraciones heterogéneas. Si desea hacerlo, no es necesario migrar los datos de LOB.
Si decide incluir LOB, puede decidir a continuación las demás configuraciones para LOB:
-
El modo LOB determina cómo se gestionan los LOB:
-
Modo de LOB completo: en modo de LOB completo, AWS DMS migra todos los LOB del origen al destino sin importar el tamaño. En esta configuración, AWS DMS no tiene información sobre el tamaño máximo de los LOB. Por lo tanto, los LOB se migran de uno en uno. El modo LOB completo puede ser bastante lento.
-
Modo de LOB limitado: en modo de LOB limitado, establece un tamaño máximo de LOB que DMS debe aceptar. Eso permite que DMS asigne previamente la memoria y cargue los datos de LOB en masa. Los LOB que superen el tamaño máximo de LOB se truncarán y se emitirá una advertencia para el archivo de registro. En el modo de LOB limitado, puede conseguir una mejora significativa del rendimiento frente al modo de LOB completo. Le recomendamos que utilice Limited LOB mode siempre que sea posible. El valor máximo para este parámetro es 102 400 KB (100 MB).
nota
El uso de la opción Tamaño máximo de LOB (K) con un valor superior a 63 KB afecta al rendimiento de una carga completa configurada para ejecutarse en modo de LOB limitado. Durante una carga completa, DMS asigna memoria multiplicando el valor del tamaño máximo de LOB (k) por la tasa de asignación y el producto se multiplica por el número de columnas de LOB. Cuando DMS no puede preasignar esa memoria, consume memoria SWAP, lo que afecta negativamente al rendimiento de las tareas de carga completa. Si experimenta problemas de rendimiento al utilizar el modo de LOB limitado, considere la posibilidad de reducir la tasa de asignación hasta alcanzar un nivel de rendimiento aceptable. Durante el modo CDC, DMS asigna memoria multiplicando el número de columnas de LOB por el parámetro Tamaño máximo de LOB especificado en la configuración de la tarea de LOB limitado y, a continuación, por el tamaño del registro. El proceso CDC de DMS consta de un solo subproceso por tarea de DMS. Para obtener más información, consulte Configuración de ajuste del procesamiento de cambios.
Para validar el tamaño de LOB limitado, debe establecer
ValidationPartialLobSizeen el mismo valor queLobMaxSize(K). -
Modo de LOB en línea: en el modo de LOB en línea, se establece el tamaño máximo de LOB que DMS transfiere en línea. Los LOB más pequeños que el tamaño especificado se transfieren en línea. Los LOB con un tamaño superior al especificado se replican mediante el modo de LOB completo. Puede seleccionar esta opción para replicar los LOB pequeños y grandes cuando la mayoría de los LOB son pequeños. DMS no admite el modo de LOB en línea para los puntos de conexión que no admiten el modo de LOB completo, como S3 y Redshift.
nota
Con Oracle, los LOB se tratan como tipos de datos VARCHAR, siempre que sea posible. Este enfoque significa que AWS DMS los recopila en bloque desde la base de datos, lo que es significativamente más rápido que otros métodos. El tamaño máximo de un VARCHAR en Oracle es 32 K. Por lo tanto un tamaño de LOB limitado de menos de 32 K es óptimo si Oracle es la base de datos de origen.
-
-
Cuando se configura una tarea para que se ejecute en el modo Limited LOB, la opción Max LOB size (K) [Tamaño máximo de LOB (K)] establece el tamaño máximo de LOB que AWS DMS va a aceptar. Cualquier LOB que sea superior a este valor se trunca en este valor.
-
Cuando se configura una tarea para que utilice el modo Full LOB, AWS DMS recupera los LOB por partes. La opción LOB chunk size (K) determina el tamaño de cada pieza. Al configurar esta opción, tenga en cuenta el tamaño máximo de paquete que permite su configuración de red. Si el tamaño del fragmento LOB supera el tamaño máximo permitido del paquete, es posible que vea errores de desconexión. El valor recomendado para
LobChunkSizees 64 kilobytes. Si se aumenta el valor paraLobChunkSizea más de 64 kilobytes, se pueden producir errores en las tareas. -
Cuando una tarea está configurada para ejecutarse en modo de LOB en línea, la configuración de
InlineLobMaxSizedetermina qué LOB transfiere DMS en línea.nota
Es obligatorio disponer de una clave principal para las tablas que contienen columnas LOB durante las operaciones de captura de datos de cambios (CDC). DMS usa esta clave para buscar los valores de LOB en la tabla de origen. Este requisito solo se aplica a las tareas de CDC: las tareas de carga completa pueden leer y copiar columnas LOB enteras directamente del origen al destino sin restricciones.
Para obtener más información sobre la configuración de las tareas para especificar estas opciones, consulte Configuración de las tareas de los metadatos de destino
Comandos SQL para comprobar la longitud máxima de la columna LOB en la tabla de origen
Utilice los siguientes comandos SQL para comprobar la longitud máxima de la columna LOB y configurar en consecuencia los ajustes de LOB limitados de DMS para evitar el truncamiento de los datos durante la migración:
- Oracle
-
SELECT dbms_lob.getlength(<COL_NAME>) as LOB_LENGTH FROM <TABLE_NAME> ORDER BY dbms_lob.getlength(<COL_NAME>) DESC FETCH FIRST 10 ROWS ONLY; Select ((max(length(<COL_NAME>)))/(1024)) from <TABLE_NAME> - de SQL Server
-
Select top 10 datalength(<COL_NAME>) as fieldsize from <TABLE_NAME> order by datalength(<COL_NAME>) desc;
- MySQL
-
Select (max(length(<COL_NAME>))/(1024)) as "Size in KB" from <TABLE_NAME>;
- PostgreSQL
-
Select max((octet_length(<COL_NAME>))/(1024.0)) as "Size in KB" from <TABLE_NAME>;
- Db2 LUW
-
-- Method 1: Using SYSCAT.COLUMNS (converting to KB) SELECT TABSCHEMA, TABNAME, COLNAME, LENGTH/1024 as LENGTH_KB, TYPENAME FROM SYSCAT.COLUMNS WHERE TYPENAME IN ('BLOB', 'CLOB', 'DBCLOB') ORDER BY LENGTH DESC; -- Method 2: For specific table with KB conversion SELECT COLNAME, LENGTH/1024 as LENGTH_KB, TYPENAME FROM SYSCAT.COLUMNS WHERE TABSCHEMA = 'YOUR_SCHEMA'AND TABNAME = 'YOUR_TABLE'AND TYPENAME IN ('BLOB', 'CLOB', 'DBCLOB'); -- Method 3: Using SYSIBM.SYSCOLUMNS SELECT TBCREATOR, TBNAME, NAME, LENGTH/1024 as LENGTH_KB, COLTYPE FROM SYSIBM.SYSCOLUMNS WHERE COLTYPE IN ('BLOB', 'CLOB', 'DBCLOB') ORDER BY LENGTH DESC; SYBASE : SELECT c.name as column_name, t.name as data_type, (c.length)/1024 as length_KB FROM syscolumns c JOIN systypes t ON c.usertype = t.usertype WHERE object_name(c.id) = 'YOUR_TABLE_NAME'AND t.name IN ('text', 'image', 'unitext') ORDER BY c.length DESC;