SSIS并行执行不运行序列容器

问题描述 投票:0回答:2

我正在编写一个SSIS包,以便我们并行执行我们的ssis任务。我有一个控制系统来管理要执行的包。这些包被分组为可以同时执行的包(即,不依赖于组中的任何其他包),并且由这些分组排序。

我将所有要与其组一起执行的程序包放入一个表中,我将其用作队列表。然后我将所有组都放入一个对象中并循环遍历ForEach循环中的组。在这个FEL中,我有2个序列容器。这些容器具有作用域的变量。我根据所需的组从队列表中获取下一个包。 Parallel Execute package

通常的行为是在循环中执行的第一个组运行良好,包在SEQ0和SEQ1上运行。 问题是在执行下一个组期间,只执行一个序列容器,因此没有并行执行。它可以与0或1执行交替,但另一个不启动。我添加了一些日志记录到“获取执行属性”存储过程,因为我想知道这是否返回没有一行停止执行,但没有日志,所以它没有在那一侧执行。

有没有人知道为什么会发生只有一个序列容器会执行?

ssis
2个回答
0
投票

将SEQ-0和SEQ-1放入另一个序列容器中。


0
投票

好的,所以我发现了这个问题,并且它不是SSIS问题,尽管我之前的日志记录显示这是问题所在。

基本上,检索要执行的下一个包的存储过程导致了问题。我正在做一个CTE更新,以获得下一行:

with CTE AS (
SELECT 
    TOP(1) 
    SSISPackageKey
    , IsProcessed
FROM 
    QueueTable WITH (UPDLOCK, ROWLOCK, READPAST)
WHERE
    IsProcessed = 0
ORDER BY
    ExecuteOrder ASC)
UPDATE 
    CTE
SET
    IsProcessed = 1
OUTPUT
    inserted.SSISPackageKey INTO @SSISPackage;

当2个并行流在同一时间执行时,这里似乎存在问题。大多数情况下,一个进程将获得一行并返回要执行的包,另一个进程将跳过所有行并且不返回任何内容。我认为锁被升级为页锁,然后被读过去,这意味着线程没有工作要做。

我现在的简单解决方案是在SQL - Parallel 1开始之前添加“WAITFOR DELAY”00:00:01“,这意味着在并行执行开始时,表上没有争用,导致良好的并行执行。非常令人沮丧!

© www.soinside.com 2019 - 2024. All rights reserved.