SSIS Flat FIle到OLE DB目标优化

时间:2018-05-16 14:14:35

标签: sql-server ssis visual-studio-2017 sql-server-data-tools

SSIS比较新,但是我已经构建了一个包来加载几个分组的平面文件(从Progress数据转储)到适当的SQL staging表。每个平面文件组代表源逻辑表,并作为相同表名的多个平面文件存在,并附加一个int增量(例如matdb-1,matdb-2等)。每个平面文件都包含最多500,000行的分隔数据。

我有Foreach循环容器,其数据流任务包含一个平面文件源到OLE DB目标使用“表或视图 - 快速加载”,“检查Contstraints”未选中,然后文件系统任务将处理后的文件移动到档案

最大的表(目前为2520万行)平均每个文件需要处理6.5-7分钟,我希望将其降低,最好至少减半。目标表由2个int列,30个varchar(max)列,6个varchar(100)列和1个varchar(18)列组成。

我已经阅读,尝试并测试了一些文章建议,用于修改DefaultBufferMaxRows / DefaultBufferSize,将AutoAdjustBufferSize设置为True并修改OLE DB目标编辑器中的“每批次行数”/“最大插入提交大小”作为从默认设置中提高性能,但我尝试的所有内容只会增加处理时间,而我却在寻找更有效的解决方案。

欢迎任何和所有问题/建议,我会尽力回应。感谢。

1 个答案:

答案 0 :(得分:-1)

以防万一SSIS加速没有成功......这是我的SQL方法:

declare @i int = 1;
declare @maxFileNo int = 6;

declare @filenamePattern nvarchar(99) = 'matdb-';
declare @sqlPattern nvarchar(999) = 'insert stageTable select * from OPENROWSET(BULK ''__fileName__'', formatfile = ''formatFile.fmt'') a';
declare @sql nvarchar(999);

while @i <= @maxFileNo begin
    set @sql = REPLACE(@sqlPattern, '__fileName__', @filenamePattern + CAST(@i as nvarchar(2)));
    exec(@sql);
    set @i += 1;
end