Balanced Data Distributor一次一个地将数据插入目的地但不并行

时间:2017-11-15 13:58:22

标签: ssis

我使用SSIS Balance Data Distributor只是为了从OLEDB源到OLEDB目的地填充50,000条记录,

当我不使用SSIS BDD时,使用BDD需要2分40秒,需要1分55秒,这并没有那么大的差异。

我还发现数据没有加载到目标并行地它在第一个目的地加载,然后在它上面填充下一个目的地。 (一次一个)你们中的任何人都可以帮助你们平行填写它们吗?

2 个答案:

答案 0 :(得分:1)

平衡数据分布不是性能和运行时的灵丹妙药。这时很好:

  • 您拥有CPU密集型转换,并且可以从并行执行中受益
  • 您的目的地支持并发插入

第一种情况很明显,这取决于您的数据流。至于OLE DB目标上的并发插入;最好的结果是在堆表或没有主键/聚簇索引的表以及其他索引上。或者,必须在自动增量代理键上定义聚簇键。在OLE DB目标上,您可能需要禁用表锁;否则它可以防止插入物平行。但是请检查一下你自己,就像Mark的回答中所写的那样 - 有时并行插入可以与表锁一起使用,但是在堆表或列存储上。 其他表类型(具有索引,群集与否)可能会将锁升级到表级别或需要索引重建,从而有效地禁用并行插入。删除或禁用它 因此,您必须评估自己的天气,并行执行证明了开发和支持方面的额外努力。

答案 1 :(得分:0)

当您使用BDD插入同一个表时,如果表是堆(没有聚簇索引)并且没有唯一约束,则只会获得并行插入。

如果所有目的地的tablock都打开,则sql将采用特殊锁定(BU),这将允许并行插入到同一堆。

如果表上没有其他索引且数据库不在完全恢复模式中,您将获得最小日志记录的额外好处。

正如你在问题中提到的那样,使用BDD可以节省大约45秒 - 它确实在工作。在具有更多内核和内存的服务器上运行时,您可能会看到不同的性能,因此请务必在那里进行测试。成功的衡量标准是总持续时间,而不是Visual Studio在其调试器中显示的内容。 规划服务器执行,在数据流上增加这两个属性也很有帮助:

-DefaultBufferMaxRows(尝试添加0以使其达到100,000)

-DefaultBufferSize - 添加零到最大输出内存

如果您使用的是sql 2016,则可以将AutoAdjustBufferSize设置为true,这将忽略上述属性并将缓冲区优化为最佳性能大小。 这些调整将增加插入的提交大小,这将导致在某种程度上更快的写入。

底线是保持tablock,在服务器上测试。 BDD正在运作。