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

#1 Rafael Salas
03/10/2007 - 15:29 | Informe spam
Adriana,

Lo primero que tienes que hacer es identificar el cuello(s) de botella(s)
del paquete. Tendras que determinar si es en el componente 'source', en los
componentes de transformacion, on en el destino.

esto es muy facil; crea una copia del paquete, y borra todos los componentes
del data flow que esten despues del 'source' y anade un componente 'union
all; ejecuta el paquete y compara el tiempo de ejecucion. Si aun es muy
lento; significa que el problema esta el la fuente de datos; asi que debes
ver que puedes hacer al respecto (revisar el query si es una tabla(s), la
ubicacion del archivo, si es un archivo, etc).

Para determinar si el problema es en la logica de transofrmacion (lookups,
data conversion, derived column, etc); anade todos los componentes de nuevo,
pero esta vez reemplaza el destino con un 'union all'; ejecuta el paquete y
compara el tiempo; si es muy lento, tendrias que revisar la logica de
transformacion. En general evita usar sort, aggreagate, OLE DB commands
cunado sea posible.

Tal vez si describes un poco lo que hay en el paquete, te pueda dar consejos
especificos.
Rafael Salas


"Adriana" wrote:

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


Respuesta Responder a este mensaje
#2 Alejandro Mesa
04/10/2007 - 02:45 | Informe spam
Hola Rafael,

Interesante esa forma de ir provando cada capa.

Gracias por el tip,
AMB

"Rafael Salas" wrote:

Adriana,

Lo primero que tienes que hacer es identificar el cuello(s) de botella(s)
del paquete. Tendras que determinar si es en el componente 'source', en los
componentes de transformacion, on en el destino.

esto es muy facil; crea una copia del paquete, y borra todos los componentes
del data flow que esten despues del 'source' y anade un componente 'union
all; ejecuta el paquete y compara el tiempo de ejecucion. Si aun es muy
lento; significa que el problema esta el la fuente de datos; asi que debes
ver que puedes hacer al respecto (revisar el query si es una tabla(s), la
ubicacion del archivo, si es un archivo, etc).

Para determinar si el problema es en la logica de transofrmacion (lookups,
data conversion, derived column, etc); anade todos los componentes de nuevo,
pero esta vez reemplaza el destino con un 'union all'; ejecuta el paquete y
compara el tiempo; si es muy lento, tendrias que revisar la logica de
transformacion. En general evita usar sort, aggreagate, OLE DB commands
cunado sea posible.

Tal vez si describes un poco lo que hay en el paquete, te pueda dar consejos
especificos.
Rafael Salas


"Adriana" wrote:

> 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
>
>
Respuesta Responder a este mensaje
#3 Adriana
04/10/2007 - 13:40 | Informe spam
Hola Rafael, muchas gracias por contestar. Verás he probado el mismo
paquete en otra máquina, ejecutándolo en depuración y va
perfectamente, tarda unos pocos segundos, y ese mismo paquete lo he
ejecutado en depuración en el servidor donde se debe ejecutar y va
lentísimo. El servidor de sqlServer que llama al paquete está en un
servidor montado con clusters, y el paquete lee de unos xml que están
en otro servidor diferente, lo que parece es que la comunicación entre
donde está el sqlServer y donde están los xml es muy lenta porque en
lo que tarda es en cargar el dataflow, una vez entra dentro lo hace
rápido. Si se te ocurre cómo puedo solucionarlo me vendría genial, de
todas formas lo hablaré con la gente de comunicaciones de aquí por lo
del tema de seguridad. El paquete lo que hace es leer de una tabla de
la base de datos y para cada registro que lee, descarga un xml y lo
inserta en otra tabla. Gracias por todo, es que soy nueva en
integration services.
Saludos
Respuesta Responder a este mensaje
#4 Rafael Salas
04/10/2007 - 15:02 | Informe spam
Adriana,

Pues la verdad si el paquete se ejecuta rapido en una maquina y en otra no;
lo ideal seria buscar en cuales son las diferencias entre ambas maquinas.
Problemas de red es lo primero que se me viene a la mente.

Ahora si puedes traducir este pedazo en terminos de componentes y tareas de
SSIS; seria mas facil para mi poder saber si hay algo que se pueda mejorar
para acelerar la ejecucion:

" El paquete lo que hace es leer de una tabla de
la base de datos y para cada registro que lee, descarga un xml y lo
inserta en otra tabla."

Rafael Salas
Rafael Salas


"Adriana" wrote:

Hola Rafael, muchas gracias por contestar. Verás he probado el mismo
paquete en otra máquina, ejecutándolo en depuración y va
perfectamente, tarda unos pocos segundos, y ese mismo paquete lo he
ejecutado en depuración en el servidor donde se debe ejecutar y va
lentísimo. El servidor de sqlServer que llama al paquete está en un
servidor montado con clusters, y el paquete lee de unos xml que están
en otro servidor diferente, lo que parece es que la comunicación entre
donde está el sqlServer y donde están los xml es muy lenta porque en
lo que tarda es en cargar el dataflow, una vez entra dentro lo hace
rápido. Si se te ocurre cómo puedo solucionarlo me vendría genial, de
todas formas lo hablaré con la gente de comunicaciones de aquí por lo
del tema de seguridad. El paquete lo que hace es leer de una tabla de
la base de datos y para cada registro que lee, descarga un xml y lo
inserta en otra tabla. Gracias por todo, es que soy nueva en
integration services.
Saludos


Respuesta Responder a este mensaje
#5 Adriana
04/10/2007 - 17:02 | Informe spam
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
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida