SSIS并行执行不运行序列容器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSIS并行执行不运行序列容器相关的知识,希望对你有一定的参考价值。
我正在编写一个SSIS包,以便我们并行执行我们的ssis任务。我有一个控制系统来管理要执行的包。这些包被分组为可以同时执行的包(即,不依赖于组中的任何其他包),并且由这些分组排序。
我将所有要与其组一起执行的程序包放入一个表中,我将其用作队列表。然后我将所有组都放入一个对象中并循环遍历ForEach循环中的组。在这个FEL中,我有2个序列容器。这些容器具有作用域的变量。我根据所需的组从队列表中获取下一个包。 Parallel Execute package
通常的行为是在循环中执行的第一个组运行良好,包在SEQ0和SEQ1上运行。 问题是在执行下一个组期间,只执行一个序列容器,因此没有并行执行。它可以与0或1执行交替,但另一个不启动。我添加了一些日志记录到“获取执行属性”存储过程,因为我想知道这是否返回没有一行停止执行,但没有日志,所以它没有在那一侧执行。
有没有人知道为什么会发生只有一个序列容器会执行?
将SEQ-0和SEQ-1放入另一个序列容器中。
好的,所以我发现了这个问题,并且它不是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“,这意味着在并行执行开始时,表上没有争用,导致良好的并行执行。非常令人沮丧!
以上是关于SSIS并行执行不运行序列容器的主要内容,如果未能解决你的问题,请参考以下文章