jueves, 4 de noviembre de 2010

SSIS: Optimizando inserciones OLEDB


Que los registros se graben en una tabla es (casi) el propósito principal de un paquete ETL. Tras combinar nuestras fuentes de datos y realizar las transformaciones correspondientes... sólo nos queda despejar de la ecuación ETL la L de LOAD.
Entre las tareas que pueden denominarse comunes en un proyecto de BI es la construcción de un datamart o datawarehouse, y las tablas hechos pueden contener un volumen considerable como para hacer inserciones de filas una por una.
¿De qué forma podemos optimizar las inserciones de estas filas sin evitar que se realice el chequeo de restricciones tales como una clave principal?... Si intentamos introducir en la tabla una clave duplicada genera una fila de error en el componente que podemos capturar y procesar.
Teniendo esto en cuenta, la solución pasa por añadir más destinos y anidarlos, conectando al siguiente componente destino la salida de error del anterior.

La siguiente imagen es una muestra de cómo conectar los destinos de mayor a menor tamaño de lotes:









De esta forma podemos tener inserciones de lotes de filas de distinto volumen y que se vaya trasladando cada lote en caso de no cumplir con las restricciones de la tabla al siguiente componente.
Mediante esta metodología intentamos introducir grandes lotes de filas y en caso de que alguna genere un error, pasa a un tratamiento más "fino", hasta llegar a la inserción de una fila por lote.
Lo único que hay que hacer es cambiar la configuración de nuestro componente OLEDB Destination modificando los siguientes parámetros:




Si el flujo de datos que tratamos siempre contiene un número considerable de duplicados, la optimización es mejor hacerla tras la carga y antes de la transformación. Esto lo veremos en el siguiente artículo.

En la siguientes capturas se puede apreciar la diferencia de tiempo que hay en la ejecución de un paquete con filas duplicadas en destino y las distintas formas de realizar la inserción:

Fila por fila:









Filas por lotes:











Una significativa diferencia de 2'5 minutos en el proceso de inserción en un destino donde existen el 25% de las filas.
Existen formas más efectivas de eliminar las filas del flujo de datos que ya existan en la tabla destino. El método a utilizar depende de la cantidad de datos que se vaya a manejar.

No hay comentarios:

Publicar un comentario

Entradas populares