Trabajos en el SQLServerAgent, ejecución de SSIS

03/10/2007 - 13:39 por Adriana | Informe spam
Hola grupo, a ver si me podeis echar una mano, tengo un paquete de
Integration Services (SSIS) que realiza la lectura, inserción y
modificación de una serie de tablas de la base de datos de SQL Server
2005. He creado una tarea programada que se ejecuta cada dos minutos
que ejecuta dicho paquete. El problema es que tarda mucho en
ejecutarse y no se porque. Hice el deploy para poner el paquete en el
sqlServer pero porque me dijeron que podría ser por eso, pero sigue
tardando mucho en ejecutarse. Alguién podría dame una solución para
que se ejecutara más rápido? Gracias.
Saludos

Preguntas similare

Leer las respuestas

#6 Rafael Salas
04/10/2007 - 19:42 | Informe spam
Adriana,

Yo no tengo experiencia usando XML source somponents. EN general you hago
los 'joins' o directamente en el source component (cuando son tablas en la
misma base de datos), o a traves de lookups. En tu caso eso no es una opcion
pues tu fuente no es OLEDB/ODBC.

De tu dataflow lo unico que pudiese perjudicar la velocidad de ejcucion es:

* Sort. Aca no hay mucho que hacer pues el merge join require que los
datasets esten ordenados.

*OLE DB Command. Como parte de mis 'mejores practicas' yo evito usear OLE DB
commands a toda costa; pues so operaciones que se ejecutan por cada registro
que pasa por el dataflow. En este caso existe un truco que pudieses usar: En
lugar de usar un OLE DB command; usa un OLE DB desination que apunta a una
table 'staging' o temporal. de esta manera el data flow solo hace
insercciones. Luego en el control flow, usa un execute sql task para
actualizar la table destino usando la tabla temporal. De esta manera si por
ejemplo habian 1000 registros a ser actualizados; se haria en una transaccion
en lugar de 1000. El porcentaje de mejria es proporcional al numero de
registros que se va actualizar. Si solo son unos pocos, no veras gran
diferencia.

Suerte!


Rafael Salas


"Adriana" wrote:

Sí, lo del tema de red lo miraré con los de comunicaciones. En cuanto
al paquete lo que hace es:
- Mediante un SQL Task lee de una tabla y el resultado lo mete en un
resultSet que se le pasa a un bucle foreach
- Para cada registro recogido:
- Con un XML source leo el XML, la única forma de la que me dejó
montarlo como quería era, los dos primeros nodos los paso a un merge
join y el resultado de este lo paso a un Sort. Luego el resultado del
sort lo paso junto con el tercer nodo del xml a otro merge join y de
ahí a un data conversion. Sigo con un derived colum para crear un
columna que se forma con varios atributos de un nodo. Hago un lookup
para comprobar si la fila ya existe en la tabla en la que se va a
insertar. Si existe la actualiza con un comando OLE DB, y si no está
la inserta con un OLE DB Destination.
- Si todo ha ido bien, con un SQL Task actualizo una tabla poniendo el
estado a ok y sino, además de actualizar la tabla, envía un correo de
error con Send Mail Task.

Ejemplo de XML:

<nodo1 attr1=' ' attr2=' '>
<nodo2 attr1=' ' attr2=' '>
<nodo3 attr1=' ' attr2=' '>
<nodo4 attr1=' ' attr2=' ' />
<nodo4 attr1=' ' attr2=' ' />
<nodo4 attr1=' ' attr2=' ' />
<nodo4 attr1=' ' attr2=' ' />
</nodo3>
</nodo2>
</nodo1>

Yo de este xml necesito atributos de todos los nodos para insertarlo
en la otra tabla y la única manera que he encontrado de poder juntar
los atributos de los nodos ha sido con Merge Join, si existe una
manera mejor y más eficiente de hacerlo me encantaría saberla. Muchas
gracias por todo.
Un saludo


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida