pasar - permisos para ejecutar procedimientos almacenados sql-server
¿Cómo puedo ejecutar los procedimientos almacenados del servidor sql en paralelo? (4)
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 forma de hacerlo en Transact SQL? ¿O hay una forma de hacerlo con un script por lotes (por ejemplo, vbs o powershell)?
¿Es absolutamente necesario que ambos SP se ejecuten en paralelo?
Con simples instrucciones CRUD dentro de un solo SP, he encontrado que SQL S. hace un muy buen trabajo al determinar cuál de ellas se puede ejecutar en paralelo y hacerlo. Nunca he visto 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, ¿los DTS realmente los ejecutan en paralelo? Podría ser que simplemente los ejecuta secuencialmente, luego llama al tercer SP después de que el último finalice exitosamente.
Si realmente los ejecuta en paralelo, probablemente deba seguir con DTS, pero me gustaría saber qué hace si recibo un paquete DTS, por ejemplo, 10 SP de servicio pesado en paralelo ... Es posible que tenga que hacer algunas pruebas para aprender yo mismo: D
Podría crear un Procedimiento almacenado de CLR que (usando C #) llamaría a los dos primeros en sus propios hilos, y luego bloquearía hasta que ambos se completaran ... y luego ejecutaría el tercero.
¿Eres capaz de usar sprocs CLR en su situación? Si es así, editaré esta respuesta para tener más detalles.
Puedes usar SSIS. Los beneficios de esto son que el paquete puede almacenarse en SQL Server y programarse fácilmente allí.
Desde PowerShell o cualquier lenguaje de scripting externo, puede usar la línea de comandos SQL osql o sqlcmd. Esta técnica también se puede usar para programarla en SQL Server desgranando usando también xp_cmdshell.
sp _ start _ job
Estoy haciendo algo similar en este momento, y la única forma 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 iniciar un único trabajo principal de sqlagent que a su vez ejecuta tantos sp _ start _ job''s como thread. A partir de ese punto, todos funcionan de manera 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 el inicio condicional de sproc 3.
¿Cuál es el punto en 8 núcleos si no podemos usarlos todos a la vez?