SSIS平衡数据分销商 - 增加运营数量?

时间:2013-10-15 13:24:09

标签: ssis balanced-data-distributor

根据附件,我们在数据转换中设置了一个平衡数据分配器,覆盖约200万行。脚本任务是相同的 - 每个脚本都打开一个与oracle的连接,然后首先执行删除操作然后执行插入操作。 (这是不相关的,但是由于Ole DB命令和Oracle的Microsoft Ole DB提供程序的参数问题,它已经这样做了。)

enter image description here

我遇到的问题是无论我的缓冲区有多大或我配置了多少并发执行,BDD一次不会执行超过五个并发进程。

我已经在更大的缓冲区中撤回了数十万行,它只是分为5种方式。我在多台机器上尝试了这一点 - 当前镜头来自一个16核心服务器,在程序包上配置了-1个并发执行 - 无论如何,它始终是5个并行作业。

5优于1,但插入/更新有250万行,5次并发执行时每秒15行并不比每秒2-3行(1次并发执行)好很多。

我可以强制BDD使用更多路径,如果是这样,怎么办?

3 个答案:

答案 0 :(得分:5)

简短回答:

是BDD可以使用五种以上的路径。你不应该做任何特别强迫它,根据定义它应该自动为你做。那为什么它不使用超过5个路径?因为您的源生成的数据比目标可以消耗的速度快,导致背压。要解决此问题,您需要调整目标组件。

答案很长:

从理论上讲,“BDD采用输入数据并将其与其输出的比例相等,无论多少都有。”在您的设置中,有10个输出。因此,输入数据应该同时平均分配给所有10个输出,你应该看到10个路径同时执行 - 理论上也是如此。

但BDD的另一个概念是“不是路由单个行,而是BDD对数据上的缓冲区进行操作。”这意味着数据流引擎启动一个缓冲区,用尽可能多的行填充它,并将该缓冲区移动到下一个组件(在您的情况下为脚本目标)。如您所见,每个缓冲区使用的行数相同。如果启动了其他缓冲区,您将看到更多路径被使用。由于称为背压的机制,SSIS无法使用额外的缓冲区和最终的额外路径;当源生成数据的速度快于目标可以使用数据时,就会发生这种情况。如果发生这种情况,源数据将耗尽所有内存,并且SSIS将没有任何内存用于转换和目标组件。因此,为了避免它,SSIS限制了活动缓冲区的数量。它被设置为5(无法更改),这正是您所看到的线程数。

PS:引号内的文字来自this article

答案 1 :(得分:2)

SSIS数据流任务中有一个名为EngineThreads的属性,它确定可以同时运行多少个流,其默认值为5(在SSIS 2012中,它的默认值为10,所以我假设你正在使用SSIS 2008年或更早。)最佳值取决于您的环境,因此可能需要进行一些测试以确定放在那里的内容。

这是Jamie Thomson article,其中包含更多细节。

答案 2 :(得分:1)

我通过this article on CodeProject发现了另一个有趣的事情。

  

[T]他的组件使用9,947行的内部缓冲区(按照   实验,我发现了)并且它是预设的。没有办法覆盖   这个。作为证明,我们将只使用9,947(九个   在我们的输入文件中的行和将观察的一千九百四十七行   行为。运行包后,我们会发现所有的   行被传输到第一个输出组件和另一个   组件什么也没收到。

     

现在让我们将输入文件中的行数从9,947增加到   9,948(九千九百四十八)。运行包后,我们   发现第一个输出组件收到了9,947行   第二个输出组件收到1行。

所以我在你的第一次缓冲运行中注意到你提取了50,000条记录。那些被分成9,984个记录桶并传递给每个输出。因此,基本上BDD从缓冲区获取记录,并以〜10,000记录增量将它们传递给每个输出。所以在这种情况下,你的来源可能就是瓶颈。

也许您需要将原始的Source查询分成两半并创建两个BDD驱动的数据流,实质上是您的并行吞吐量的两倍。