SSIS并行处理foreach循环

4
我正在编写一个SSIS包,从一个表中读取记录并返回20个SQL服务器名称,下一步是使用foreach循环获取数据库对象并创建该数据库脚本的文件。虽然这一步已经成功完成,但问题是它需要太长时间,大约需要3-4小时才能完成。
包的流程如下:
  • 第一步是执行单个查询的SQL任务,返回20个SQL服务器
  • 第二步是Foreach循环,遍历来自一个服务器的所有对象并生成一个存储在某个位置的文件。
问题是:
  • 我们可以将时间从3到4小时减少到最小吗?
  • 是否可能让foreach循环并行执行?
我试图将一个循环分成三个循环,这样我希望可以将3到4小时减少到1小时
非常感谢您的任何建议。
谢谢!

为什么不使用SQL Server的内置机制,如SQL Server Utility,在所有服务器上同时运行此审计查询?也就是说,如果SQL Server Utility没有收集您想要的信息,为什么不使用它呢? - Panagiotis Kanavos
我有一个程序包,正在修改它以将其执行时间缩短到最小,并且每周从SQL代理作业中执行。 - Anup Shah
是的,可以并行运行多个foreach循环。您的问题太广泛了。 - Tab Alleman
是的,它很广泛,但简要的解释已经在那里了,因为可能会有更多的评论来询问某些事情。你能帮我处理并行执行吗? - Anup Shah
我正在尝试使用SEQUENCE容器和其他东西,但仍然没有成功。 - Anup Shah
没有内置这样的功能,但是有一些扩展可以为SSIS提供此功能。COZYROC的Parallel Loop Task就是一个例子。从网上获取已经编写和测试过的内容很可能比自己编写更加稳健且易于实现。 - bielawski
1个回答

4

在SSIS中没有内置的并行foreach循环功能。这意味着您需要手动编写代码,有几种方法可供选择:

  • 将约20个任务添加到foreach循环中,每个任务基于不同的变量进行处理。可以使用BIML生成此代码以使其更易于创建和更加一致。
    • 创建一个脚本任务,执行N次子包。网上有许多关于.net并行执行的示例。

m


我已经尝试使用相同的不同变量,并将它们分为三个循环放置在一个序列容器中,但没有帮助。它仍然以绿色和黄色显示所有内容,但只有一个循环会生成文件而其他循环则不会。 - Anup Shah
这需要使用foreach循环,而不仅仅是一个常规的序列容器。 - Mark Wojciechowicz
是的,这是序列容器内的foreach循环。 - Anup Shah
我误读了你的评论,似乎其他的foreach循环没有正确配置,如果它们没有产生输出。在其中加入一些断点并查看变量设置,也许输出文件正在被覆盖。 - Mark Wojciechowicz
我复制了已经工作的相同的循环,并将其分成两个循环,通过将其输入值更改为 where 条件来提供两个不同的测试输入。变量已经相应更改。例如,第一个循环读取服务器 SQL1,第二个读取 SQL2,并将其作为物理文件创建到相应的 SQL 和 SQL2 文件夹中。 - Anup Shah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接