Pregunta

Quiero hacer algo como:

exec sproc1 and sproc2 at the same time
when they are both finished exec sproc3

Puedo hacer esto en dts. ¿Hay alguna manera de hacerlo en Transact SQL? ¿O hay alguna manera de hacerlo con un script por lotes (por ejemplo, vbs o powershell)?

¿Fue útil?

Solución

sp _ inicio _ trabajo

Estoy haciendo algo similar en este momento, y la única forma en que he encontrado para evitar el uso de SSIS o algún shell externo es dividir mi rutina de carga en 'hilos' manualmente, y luego disparar un solo trabajo sqlagent maestro que a su vez ejecuta tantos sp _ start _ job como tengo subprocesos. Desde ese punto, todos se ejecutan de forma autónoma.

No es exactamente lo que estamos buscando, pero el resultado es el mismo. Si prueba el estado del trabajo para los trabajos secundarios, también puede implementar su inicio condicional de sproc 3.

¿Cuál es el punto en 8 núcleos si no podemos usarlos todos a la vez?

Otros consejos

Podría crear un procedimiento almacenado CLR que (usando C #) llamaría a los dos primeros en sus propios subprocesos, y luego los bloquearía hasta que ambos se completen ... luego ejecute el tercero.

¿Puede usar los procesadores CLR en su situación? Si es así, editaré esta respuesta para tener más detalles.

¿Necesita absolutamente que ambos SP se ejecuten en paralelo?

Con sentencias CRUD simples dentro de un solo SP, he descubierto que SQL S. hace un muy buen trabajo al determinar cuáles de ellas se pueden ejecutar en paralelo y hacerlo. Nunca he visto a SQL S. ejecutar 2 SP en paralelo si ambos se llaman secuencialmente desde una declaración T-SQL, ni siquiera sé si es posible.

Ahora bien, ¿el DTS realmente los ejecuta en paralelo? Podría ser que simplemente los ejecuta secuencialmente, luego llama al 3er SP después de que el último finalice con éxito.

Si realmente los ejecuta en paralelo, probablemente debería seguir con DTS, pero luego me gustaría saber qué hace si tengo una llamada de paquete DTS, digamos, 10 SP de servicio pesado en paralelo ... Puedo tengo que hacer algunas pruebas para aprender que yo mismo: D

Puede usar SSIS. Los beneficios de esto son que el paquete puede almacenarse en el servidor SQL y programarse fácilmente allí.

Desde PowerShell o casi cualquier lenguaje de script externo, puede usar la línea de comando SQL osql o sqlcmd. Esta técnica también se puede utilizar para programarlo en el servidor SQL mediante el uso de xp_cmdshell también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top