SSIS 平面 FIle 到 OLE DB 目标优化



对SSIS 来说相对较新,但我已经构建了一个包来加载多个分组平面文件(来自进度数据转储)到适当的 SQL 临时表中。每个平面文件组表示源逻辑表,并作为具有相同表名的多个平面文件存在,并附加一个 int 增量(例如 matdb-1、matdb-2 等)。每个平面文件包含最多 500,000 行的分隔数据。

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

最大的表(目前为 2520 万行)每个文件平均需要 6.5-7 分钟来处理,我想把它记下来,最好至少减少一半。目标表由 2 个 int 列、30 个 varchar(max) 列、6 个 varchar(100) 列和 1 个 varchar(18) 列组成。

我已经阅读、尝试和测试了一些文章建议,用于修改 DefaultBufferMaxRows/DefaultBufferSize,将自动调整缓冲区大小设置为 True 并在 OLE DB 目标编辑器中修改"每批行数"/"最大插入提交大小"作为提高默认值性能的手段,但我尝试的一切只会增加处理时间,我不知所措地试图找到更有效的解决方案。

欢迎任何和所有问题/建议,我会尽力做出适当的回应。谢谢。

以防万一使用 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 

最新更新