ssis同时执行查询

时间:2011-08-24 01:45:48

标签: sql multithreading ssis foreach

事先我是SSIS的新手。

我运行一个查询,它给出了TableA中columnA中需要按顺序处理的不同值(1然后是2然后是3,依此类推,但数字不断改变起始值和结束值)。

然后这些columnA值在columnB中具有值组,并且这些值必须通过存储过程运行,但它们都可以同时运行。目前它们以线性方式运行

以下是我需要做的事情(sudo代码)

的foreach { 的foreach { processX } }

我想要的: 的foreach { processA processB ProcessC同时没有任何碰撞需要担心 }

我在SSIS中使用控制流,它有foreach循环,但是我不知道如何使用它来同时运行第二部分。

2 个答案:

答案 0 :(得分:0)

当我想在控制流中的SQL Server中并行执行时,我通常会为每个循环放置几个For-Each循环,并为每个循环带回一个独特的记录集。

答案 1 :(得分:0)

目前无法以“并行模式”运行Foreach循环。

我能想到的最好的做法是将您的架构重新设计为灵活的“工人”线程模型,您可以在其中独立并行化。

需要两个SSIS包。一个供应工作单位,一个供工作。因此,“controller”包将在TableA上执行foreach循环,收集它需要的任何值。然后它会将这些值插入到“待办事项”表中。 “worker”包将包含一个For循环,在其中你有一个执行SQL任务,它查询了没有被处理的第一行的“工作要做”表,如果它找到了这样的row,将其标记为正在处理(所有事务都在事务中以确保没有冲突)。然后你就可以让你的“工作单位”与之合作。对下一个任务的优先约束只有在实际有一些指令时才会执行。当你没有看到任何新的工作单位时,你的For循环的Eval表达式可以被制作出来(虽然你可能希望在那里延迟以确保你的工人不比控制器更快)。

要运行所有这些,您需要启动控制器(在代理作业中),然后启动多个工作程序(相同的程序包,不同的作业) - 尽可能多的人。