Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SSI处理大量平面文件的速度非常慢_Sql Server_Ssis - Fatal编程技术网

Sql server SSI处理大量平面文件的速度非常慢

Sql server SSI处理大量平面文件的速度非常慢,sql-server,ssis,Sql Server,Ssis,从我们的一个合作伙伴那里,我收到了大约10000个以制表符分隔的小文本文件,每个文件中有+/-30条记录。他们不可能把它放在一个大文件中交付 我在ForEach循环容器中处理这些文件。读取文件后,将执行4列派生,最后将内容存储在SQL Server 2012表中 此过程最多需要两个小时 我已经尝试过将小文件处理成一个大文件,然后将这个文件导入到同一个表中。这个过程需要更多的时间 有人对加快处理速度有什么建议吗?您的文件是否提供了一种简单的方法(即它们的名称)将它们细分为偶数(或大部分偶数)组?如

从我们的一个合作伙伴那里,我收到了大约10000个以制表符分隔的小文本文件,每个文件中有+/-30条记录。他们不可能把它放在一个大文件中交付

我在ForEach循环容器中处理这些文件。读取文件后,将执行4列派生,最后将内容存储在SQL Server 2012表中

此过程最多需要两个小时

我已经尝试过将小文件处理成一个大文件,然后将这个文件导入到同一个表中。这个过程需要更多的时间


有人对加快处理速度有什么建议吗?

您的文件是否提供了一种简单的方法(即它们的名称)将它们细分为偶数(或大部分偶数)组?如果是这样,您可以并行运行负载

例如,假设您可以将它们分成4组,每组2500个文件

  • 为每个组创建一个Foreach循环容器
  • 对于每个组的目的地,将记录写入它们自己的暂存表
  • 将所有暂存表中的所有记录合并到最后的大表中

  • 如果文件本身没有提供一种简单的方法来对它们进行分组,那么当您的合作伙伴发送它们时,请考虑将它们推到子文件夹中,或者将文件路径插入数据库,以便编写查询对其进行细分,并将文件路径字段用作数据流任务中的变量。

    听起来违反直觉的一件事是将一个派生列转换替换为4,并让每个列执行单个任务。这可以提供性能改进的原因是,如果引擎能够确定这些更改是独立的,那么它可以更好地并行化操作

    由于正在引用远程服务器上的文件,您可能会遇到网络延迟。也许可以通过在处理之前将这些远程文件复制到本地框来提高性能。您感兴趣的性能计数器有

    • 网络接口/当前带宽
    • 网络接口/字节总数/秒
    • 网络接口/传输/秒

    您可以做的另一件事是用行计数转换替换目标列和派生列。对所有文件运行包几次,这将确定理论上的最大速度。你不能跑得比那更快了。然后添加派生列并重新运行。这将有助于您了解性能下降是由于目标、派生列操作还是包正在以IO子系统所能达到的速度运行。

    您的包看起来像一个Foreach循环。在Foreach循环中,您有一个数据流任务。数据流任务具有平面文件源。派生列转换连接到平面文件源。然后将(OLE DB目标或SQL Server目标)附加到派生列转换?如果您使用的是OLE DB目标,它是如何配置的?您正在写入SQL Server 2012表,但包本身是2012包还是以前的版本?包是否在文件所在的同一服务器上运行,以及是否与目标表在同一服务器上运行?请确保在目标数据流上使用Open Rowset using FastLoad设置。这可以显著加快加载过程。当您将文件组合在一起时,这将更有帮助。是的,在ForEach容器中:平面文件源->派生->OLE DB目标。目标配置为未选中“表锁”,数据访问模式=快速加载,未选中“检查约束”。包本身是2012年的,存储在SQL Server上。我在SQL Server上没有文件访问权限,因此源文件存储在其他服务器上。谢谢Kyle。每个文件的文件名包括月份和年份。我已经将文件分为几个月,每个文件夹大约留下1500个文件。我通过调整OLEDB目标中的“每批行数”和“最大插入提交大小”设置,设法加快了过程。现在处理这些文件大约需要1小时(原始估计,因为它仍在按我们所说的方式处理。如果每个文件只有约30行,那么更改“每批行数”不太可能对您有多大帮助。很可能所有内容都已作为单个批提交。如果您有多个数据缓冲区,跨多个转换拆分工作只会提高性能。如果我我在读原始帖子,对了,他每个文件只处理30行,这总是会进入一个缓冲区。诅咒你@mattmasson和你高超的SSIS知识!