Hola a todos,
Estoy haciendo en SSIS 2008 la carga de información de tablas de as400, las tablas pequeñas no tengo problemas me trae bien, pero al traer una tabla de 711534 registros la misma que tiene 253 columnas el tiempo de carga es de alrededor de 40 min lo cual es algo que no sirve, anteriormente lo teniamos en DTS 2000 y el tiempo de carga no es mayor a 2 min.
Intentado algunas cosas pero ninguna me da resultado, no se que me recomiendan hacer para poder hacer esto con igual o menor tiempo que la version 2000.
Espero sus respuestas.
De antemano gracias.
- Printer-friendly version
- Log in to post comments
Hola Jonathan Supongo que ya
Submitted by Carlos on Tue, 03/12/2013 - 01:03
Hola Jonathan
Supongo que ya habréis hecho pruebas, pero me parece una diferencia demasiado grande para venga sólo por el cambio de versión de DTS a SSIS. Yo antes que nada me aseguraría de que no hay algún factor más que os ralentiza esta carga, como saturación de las bases de datos, espacio, bloqueos..
De la parte de SSIS tampoco tengo gran experiencia, pero yo revisaría sobretodo los parámetros de carga, asegurándome de que estuvieran orientados a cargas masivas, sin validaciones ni transformaciones, y utilizando el máximo de memoria posible. Según cómo lo hagas suele ser la opción 'Fast Load', y revisar las opciones 'FastLoadOptions'.
Te enlazo el post Using SQL Server Integration Services to Bulk Load Data, que comenta bastante detalladamente tres métodos de carga que podrías probar. Si has utilizado OLE DB, por ejemplo, si la revisión de parámetros no te funciona, puedes probar con el componente SQL Server Destination, que según el artículo permite definir propiedades como BATCHSIZE=0 para realizar toda la carga en un solo batch.
Espero que te sea de ayuda,
Gracias Carlos, Lei el
Submitted by jatb on Wed, 03/13/2013 - 03:05
Gracias Carlos,
Lei el articulo que me has dicho, pero esto es mas orientado a archivos planos o conexiones entre bases sql, pero de as400 a sql server no sirve.
Te cuento un poco mas para hacer la conexion utilizo el proivder: IBM DB2 UDB for iSeries IBMDA400 OLE DB Provider, al hacer test me da ok, dentro del OLE DB Source utilizo esta conexion compartida y ingreso SQL command y pongo en preview y me muestra la data, esto le uno al OLE DB Destination utilizando la propieda fast load, mapeo los datos y previwe y todo ok.
Cuando mando ejecutar el contenderon me trae un promedio de 20000 por minuto que es un tiempo alto ya que en el DTS 2000 en 2 minutos ya trae los 7mil registros.
Para la tranfornmacion de datos e utilizado Multicast, Derived Column, entre otros pero la respuesta es igual de lenta.
Los epsacios en discos y lo relacionado con la bdd esta muy bien.
Espero alguien me ayude.
Saludos
Bueno, te sirve toda la parte
Submitted by Carlos on Wed, 03/13/2013 - 18:07
In reply to Gracias Carlos, Lei el by jatb
Bueno, te sirve toda la parte de configuración de los componentes destino, OLE DB o SQL Server Destination. Si no has encontrado nada que ya no hayas probado ya es otra cosa.
Otra cosa que puedes hacer es separar la importación de datos de las transformaciones, es decir, hacer una carga directa desde OLE DB Source a OLE DB Destination, que puedes dejar en una tabla temporal de SQL Server. Después haces todas las transformaciones desde la tabla temporal hacia la definitiva, así separas entornos y seguro que lo tienes más fácil para localizar el 'cuello de botella'.
La manera que solucione no
Submitted by jatb on Tue, 04/02/2013 - 18:28
La manera que solucione no se si es la adecuada es con el uso de tablas vinculadas con access, con esto la respuesta fue la misma que trabajar con DTS del 2000.
Es sorprendente que una version 8 años mas a ctual sea 100% mas lenta la carga desde as400.
Saludos
A mi me ha pasado varias
Submitted by Carlos on Tue, 04/02/2013 - 22:26
In reply to La manera que solucione no by jatb
A mi me ha pasado varias veces que he intentado hacer algo utilizando los componentes de SSIS para que sea más fácil de mantener, y al final, por la manera en que Integration Services trata el flujo de datos, prácticamente registro a registro, para que la carga no se haga eterna he terminado por eliminar los componentes y hacer la mayor parte del 'trabajo' con llamadas a sentencias SQL.
De todas maneras para una simple importación de datos no tendrían que pasar estas cosas, es muy fuerte que te funcione mejor con tablas vinculadas con access, y espero que al menos el problema sea sólo al importar desde AS400, algún bug en el driver o algo así..
Muchas gracias por compartir la solución, y me alegro de que al menos hayas podido solventar el problema de lentitud, aunque haya sido 'tirando de Access' :)