Ssis SSI如何确定控制流上的执行顺序? 总结:

Ssis SSI如何确定控制流上的执行顺序? 总结:,ssis,ssis-2012,control-flow,Ssis,Ssis 2012,Control Flow,我想找到一种方法来告诉SSI,当并行运行多个可执行文件时,应该首先运行哪些文件。互联网上有大量关于MaxConcurrentExecutables属性的资料,但没有关于SSIS如何决定以何种顺序运行可执行文件的信息 我正在寻找一个答案,该答案描述了SSIS在不存在优先级约束且可执行文件的数量大于最大并发可执行文件时用于确定可执行文件的运行时顺序的机制 更多详情: 我有一个主SSIS包,它调用大量的暂存包,每个包负责将数据复制到暂存数据库上的不同表中。这些子包的执行时间差异很大,从20分钟不等 为

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

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

更多详情: 我有一个主SSIS包,它调用大量的暂存包,每个包负责将数据复制到暂存数据库上的不同表中。这些子包的执行时间差异很大,从<1分钟到>20分钟不等

为了充分利用我的时间,我希望先运行运行较长的包,然后运行中等的包,然后运行较小的包

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

有没有办法让SSI在开始处理容器B之前启动容器A中的所有任务?如果做不到这一点,有人能描述SSIS用于确定运行顺序的逻辑吗

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

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

例如,如果您有Package1(30分钟)、Package2(10分钟)、Package3(8分钟)、Package4(8分钟),则按以下方式拆分会获得最佳性能


SEQC ASEQC B
包装1包装2
包装3
包装4

谢谢您的回答!不幸的是,简单地将包拆分为单独的容器并不会改变运行时行为。我见过这样的情况,借用上面的例子,Package4和Package2将首先启动并运行,Package1将在其中一个完成后才启动。我正在寻找一种方法来告诉SSI,我想给
SEQC a
中的可执行文件赋予比
SEQC B
中的可执行文件更高的优先级,因此它将首先关注它们。@AHiggins除非我的示例中遗漏了一些东西,如果我们将MaxConcurrentExecutables保留为默认值-1,主包同时开始执行SEQC A和SEQC B。i、 e.包1和包2并行启动,而包1正在执行(需要30分钟),包2、3和4将按相同顺序完成。我刚刚用一个简单的例子测试了这一点,我们也有类似的设置,有4个组,所有组同时启动,我有一个审计表,它用每个包的启动时间来确认这一点。哦-你是否用优先约束连接了
SEQC B
中的项目?是的,我使用的是优先约束。很抱歉我刚才看到您没有使用优先级约束,这就是随机行为的原因。SSI可以将所有可用线程分配给一个组。为了避免这种情况,不能使用脚本组件将要执行的包名传递给EP任务。这样你就可以控制执行的顺序了。好吧,这就解释了混乱的原因!我故意避免使用约束,因为这会将SSI限制在预先选择的路径上。如果Package1恰好在Package3之前完成,那么我希望先前运行Package1的“线程”继续并开始处理Package4,而不是等待Package3完成。