需要加载一个平面文件,其中包含在SQL Server 2016中的预定作业中执行的SSIS包,但它需要花费太多时间(例如2/3小时)才能在源代码中加载数据然后需要额外的( 2/3小时)排序和过滤的时间然后需要类似的时间来加载目标中的数据,该文件只有几百万行,并且它的文件大约不小于3 GB。这让我发疯,因为这会影响我服务器的性能。
SSIS包: - 我的包只是一个数据流任务,它有一个平面文件源和一个OLE DB目的地,全部 - 数据访问模式设置为FAST LOAD。 - 表中只有1个索引。我的目标表有32列
输入文件: 输入文本文件有超过32列,代理键数据可能不唯一,引用列日期可能不唯一,需要过滤它们。
面对两个问题一个是SSIS FlatFile-Source花费大量时间加载日期另一个是排序和过滤。怎么办?
答案 0 :(得分:1)
如果您希望它快速运行,请使用此模式:
您可以在SSIS中执行此类操作,但需要对其进行正确调整等等。在已经针对此进行了优化的数据库中,这样做更容易
答案 1 :(得分:0)
<强> 1。 DROP并重新创建索引
添加2 Execute SQL Task
;在Data Flow Task
之前和之后,第一次删除索引,第二次重新创建,Data Flow Task
成功执行后
<强> 2。调整缓冲区大小
您可以在以下Technet article
中详细了解缓冲区大小调整第3。删除SQL Server中的重复项而不是排序组件
尝试删除排序组件,并在运行类似查询的Execute SQL Task
之后添加Data Flow Task
:
;WITH x AS
(
SELECT col1, col2, col3, rn = ROW_NUMBER() OVER
(PARTITION BY col1, col2, col3 ORDER BY id)
FROM dbo.tbl
)
DELETE x WHERE rn > 1;
<强> 4。使用脚本组件而不是排序
您必须对以下答案实施类似的逻辑: