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目标编辑器中的“每批次行数”/“最大插入提交大小”作为从默认设置中提高性能,但我尝试的所有内容只会增加处理时间,而我却在寻找更有效的解决方案。
欢迎任何和所有问题/建议,我会尽力回应。感谢。
答案 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