SSIS并行执行包任务与C#For.Parallel

时间:2016-04-14 07:23:01

标签: c# performance ssis parallel-processing

现在搜索,尝试和测试了很长一段时间后,我需要问一个问题 - 也许有人可以帮助我。

在我目前正在开发的项目中,我需要处理大量的XML文件(最多28k文件,每个文件最多30MB)。必须将这些文件加载​​到SQL DB(相应的SSIS组件用于转换)。由于顺序处理这些文件需要很长时间,所以我决定进行并行执行。

我的第一个设计的特色是预处理文件的任务(评估文件数量和数据量并将它们分配到14个列表变量以便由14个核心处理)然后在14个单独的执行包任务中执行子包(进程中; MaxConcurrent设置为-1)。这样做很有效,但是性能很差而且非常奇怪,资源监视器只显示30%到50%之间的CPU使用率。

在我的第二个设计中,我创建了一个C#脚本Task,它通过PackageInfo.Execute在For.Parallel循环中执行子包。虽然这极大地提高了性能(并导致CPU使用率达到75%到100%),但却会导致其他风险(死锁等)。

最后但并非最不重要的是,在我的第三个设计中,我尝试了一个在网络上找到的设计,其中包含一个包含所有文件名的队列,另外14个工作人员出列并处理文件 - 相当慢......我猜这个开销很高。

现在我的问题:为什么执行包任务比C#调用(设计1和2)慢得多?

我需要以稳定和高效的方式来处理这些数据 - 从今天的角度来看,我的设计似乎都没有完成这项任务......

0 个答案:

没有答案