在我们的合作伙伴中,我收到了大约10,000个小标签分隔的文本文件,每个文件中包含+/- 30条记录。他们不可能在一个大文件中提供它。
我在ForEach循环容器中处理这些文件。读取文件后,将执行4列派生,最后将内容存储在SQL Server 2012表中。
此过程最多可能需要两个小时。
我已经尝试将小文件处理成一个大文件,然后在同一个表中导入这个文件。这个过程需要更多时间。
有没有人建议加快处理速度?
答案 0 :(得分:2)
听起来很直观的一件事就是用4取代你的一个派生列转换,并让每个转换执行一个任务。这可以提供性能改进的原因是,如果引擎可以确定这些更改是独立的,则可以更好地并行化操作。
由于您在远程服务器上引用文件,可能会遇到网络延迟。也许您可以通过在处理之前将这些远程文件复制到本地框来提高性能。您感兴趣的性能指标是
您可以做的另一件事是使用行计数转换替换目标和派生列。对所有文件运行包几次,这将决定您的理论最大速度。你将无法以更快的速度前进。然后添加Derived列并重新运行。这应该可以帮助您了解性能下降是由于目标,派生列操作还是包运行速度与IO子系统一样快。
答案 1 :(得分:0)
您的文件是否提供了将它们细分为偶数(或大多数偶数)组的简单方法(即其名称)?如果是这样,您可以并行运行负载。
例如,假设您可以将它们分成4组,每组2,500个文件。
如果文件本身不提供一种简单的方法来对它们进行分组,请考虑在伙伴发送它们时将它们推入子文件夹,或者将文件路径插入数据库,这样您就可以编写查询来细分它们并使用文件路径字段作为数据流任务中的变量。