gpt4 book ai didi

sql-server - SSIS 平面文件到 OLE DB 目标优化

转载 作者:行者123 更新时间:2023-12-04 18:22:13 25 4
gpt4 key购买 nike

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

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

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

我已经阅读、尝试和测试了一些关于修改 DefaultBufferMaxRows/DefaultBufferSize 的文章建议,将 AutoAdjustBufferSize 设置为 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

关于sql-server - SSIS 平面文件到 OLE DB 目标优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50373326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com