如何并行运行sql server存储过程?
-
07-07-2019 - |
题
我想做类似的事情:
exec sproc1 and sproc2 at the same time
when they are both finished exec sproc3
我可以用dts做到这一点。 有没有办法在transact sql中做到这一点? 或者有没有办法使用批处理脚本(例如vbs或powershell)?
解决方案
sp _ start _ job
我现在正在做类似的事情,我发现避免使用SSIS或一些外部shell的唯一方法是手动将我的加载例程拆分为“线程”,然后触发一个主要的sqlagent作业反过来执行尽可能多的sp _ start _ job,因为我有线程。从那时起,它们都是自主运行的。
这不是我们正在寻找的,但结果是一样的。如果您测试子作业的作业状态,您也可以实现sproc 3的条件启动。
如果我们不能同时使用它们,那8个核心有什么意义呢?
其他提示
您可以创建一个CLR存储过程(使用C#)将在自己的线程上调用前两个,然后阻塞直到两个完成...然后运行第三个。
你能在你的情况下使用CLR sprocs吗?如果是这样,我将编辑此答案以获得更多详细信息。
您是否绝对需要并行执行两个SP?
在单个SP中使用简单的CRUD语句,我发现SQL S.在确定哪些可以并行运行方面做得非常好。我从未见过SQL S.并行运行2个SP如果从T-SQL语句顺序调用它们,甚至不知道它是否可能。
现在,DTS是否真的并行执行它们?它可以简单地按顺序执行它们,然后在最后一次成功完成后调用第3个SP。
如果它真的并行运行它们,可能你应该坚持使用DTS,但是如果我有一个DTS包调用,比如10个重载SP并行,我想知道它会怎么做......我可能我必须做一些测试来了解自己:D
您可以使用SSIS。这样做的好处是,软件包可以存储在SQL Server中,并可以在那里轻松安排。
从PowerShell或任何外部脚本语言,您可以使用SQL命令行osql或sqlcmd。此技术也可用于通过使用xp_cmdshell进行外壳来在SQL Server上进行调度。