【问题标题】:How does SSIS determine execution order on the control flow?SSIS 如何确定控制流的执行顺序?
【发布时间】:2016-06-06 19:29:19
【问题描述】:

总结:

我想找到一种方法来告诉 SSIS,在并行运行多个可执行文件时,应该先运行哪些可执行文件。 Internet 上有大量关于 MaxConcurrentExecutables 属性的资料,但没有关于 SSIS 如何决定运行可执行文件的顺序的信息。

我正在寻找一个答案,该答案描述了当不存在优先约束并且可执行文件的数量大于最大并发可执行文件时 SSIS 用来确定可执行文件的运行时顺序的机制。

更多详情:

我有一个主 SSIS 包,它正在调用大量的 Staging 包,每个包都负责将数据复制到我们 Staging 数据库上的不同表中。这些子包执行的时间差异很大,从 20 分钟。

为了充分利用我的时间,我希望先运行运行时间较长的软件包,然后是中型软件包,然后是小型软件包。

理想情况下,我可以将包分类到优先容器(A、B、C)中,然后让 SSIS 引擎按顺序在容器上工作。我不想在启动 B 之前等待 A 完成:相反,我希望在 SSIS 开始处理 B 之前启动 A 中的所有可执行文件。

有什么方法可以让 SSIS 在容器 B 开始工作之前启动容器 A 中的所有任务?如果做不到这一点,谁能描述 SSIS 用来确定运行顺序的逻辑?

【问题讨论】:

    标签: ssis ssis-2012 control-flow


    【解决方案1】:

    MaxConcurrentExecutables 确定可以并行执行的控制流项的数量,默认为 -1。这相当于处理器数量加 2。

    在您的情况下,SEQC A、SEQC B 和 SEQC C 的执行同时开始,并继续执行每个组中的每个执行包任务,直到它全部完成。 因此,为了最好地利用处理能力并缩短执行时间,您需要将包分成每个组,这样每个组需要大致相同的时间来完成所有 EP 任务。

    例如,如果您有 Package1(30mins)、Package2(10mins)、Package3(8mins)、Package4(8mins),则按以下方式拆分可提供最佳性能。

    <table border=1 cellspacing="0px" cellpadding="5px">
      <tr>
      <th>SEQC A</th><th>SEQC B</th></tr>
    <tr><td>Package1</td><td>Package2</td>  </tr>
      <tr><td>&nbsp;</td><td>Package3</td>  </tr>
      <tr><td>&nbsp;</td><td>Package4</td>  </tr>
    </table>

    【讨论】:

    • 感谢您的回答!不幸的是,简单地将包拆分到单独的容器中并不会改变运行时行为。我见过这样的情况,借用上面的示例,Package4 和 Package2 将首先启动并运行,而 Package1 在其中一个完成之前不会启动。我正在寻找一种方法来告诉 SSIS,我希望 SEQC A 中的可执行文件比 SEQC B 中的可执行文件具有更高的优先级,因此它将首先关注它们。
    • @AHiggins 除非我遗漏了什么在我的示例中,如果我们将 MaxConcurrentExecutables 保留为默认值 -1,则主程序包开始同时执行 SEQC A 和 SEQC B。即包 1 和包 2 并行启动,而包 1 正在执行(需要 30 分钟)包 2、3 和 4 将以相同的顺序完成。我刚刚用一个简单的例子对此进行了测试,我们也有类似的设置,有 4 个组,并且都同时开始,我有一个审计表,可以用每个包的开始时间确认这一点。
    • 哦 - 您是否使用优先约束连接 SEQC B 中的项目?
    • 是的,我正在使用优先约束。对不起!我刚刚看到您没有使用优先约束,这就是随机行为的原因。 SSIS 可以将所有可用线程分配给一个组。为避免这种情况,您可以不使用脚本组件将要执行的包名称传递给 EP 任务。这样您就可以控制执行顺序。
    • 好的,这解释了混乱!我故意避免使用约束,因为这将 SSIS 限制在预先选择的路径上。如果 Package1 恰好在 Package3 之前完成,那么我希望之前运行 Package1 的“线程”继续并开始在 Package4 上工作,而不是等待 Package3 完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多