【问题标题】:SSIS parallel processing foreach loopSSIS并行处理foreach循环
【发布时间】:2016-05-31 09:50:27
【问题描述】:

我正在编写一个 SSIS 包,它从一个表中读取记录并返回 20 个 SQL Server 名称,接下来的步骤是 foreach 循环,它获取数据库对象并创建该 db 脚本的文件。即使这样做是成功的,但问题是它需要太多时间,大约是。 3-4 小时完成。

包流是,

  • 返回 20 个 SQL 服务器的 SQL 任务 - 执行单个查询
  • 第二个是Foreach 循环,它遍历来自一台服务器的所有对象并生成一个存储到某个位置的文件。

问题是,

  • 我们能否将时间从 3 小时缩短到 4 小时 到最短?
  • 是否可以让 foreach 循环并行执行?

我正在尝试将 ONE LOOP 分为三个 Loops,这样我希望可以将 3 到 4 小时 减少到 1 小时 >

非常感谢任何建议。

谢谢!

标签: sql-server foreach ssis parallel.foreach


【解决方案1】:

SSIS 中没有内置的并行 foreach 循环功能。这意味着您需要手动编写代码,在这种情况下有两种方法:

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

【讨论】:

  • 我已经完成了相同的给定差异变量并将其划分为单个序列容器中的 3 个循环,但没有帮助,它显示我运行所有颜色为绿色和黄色,但只有一个循环生成文件不是其他人。
  • 这需要是一个 foreach 循环,而不仅仅是一个常规的序列容器
  • 是的,就是序列contianer里面的foreach循环
  • 我误读了您的评论,似乎其他 foreach 循环配置不正确,如果它们不产生输出。放一些断点,看看变量设置成什么,可能是输出文件被覆盖了
  • 我复制了已经工作的相同循环,并将其分成两个循环,将其输入值更改为 where 条件以提供两个不同的输入进行测试。变量已相应更改。例如,第一个循环读取服务器 SQL1 和第二个 SQL2,并将其对象作为物理文件创建到相应的文件夹 SQL 和 SQL2。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
相关资源
最近更新 更多