【发布时间】:2021-10-25 05:41:36
【问题描述】:
我正在使用 Oracle 源和 SQL Server 目标在 SSIS 包中执行 ETL。
源包含大约 1700 万行。传输数据时,以 10000 行为单位进行传输。完成后,每 10000 行都将提交到 SQL Server 目标。
当我们观察传输所花费的时间时,我们可以注意到前 10000 行花费了 2 秒,并且在整个加载过程中逐渐增加,最后 10000 行花费了 132 秒。持续时间与行集数图如下。加载时间呈指数增长的原因可能是什么?
我们正在使用 SSIS 包中的脚本从 Oracle 源中提取数据。
目标 SQL Server 表上有 2 个索引。一个在主键上(集群),下一个在日期列上(非唯一,非集群)。但我们首先加载到没有任何索引的 SQL 服务器上的临时表。向临时表传输完成后,我们将数据传输到带有索引的实际表中。
【问题讨论】:
-
您是否进行过任何跟踪以查看时间花费在何处——在源数据库、目标数据库或 SSIS 服务器上?该图看起来与获取 10,000 行集合但对您正在做什么一无所知的低效分页查询一致,这是一个疯狂的猜测。
-
这是从 Oracle 和批量插入到 SQL Server 的简单读取。我们预计图表是平坦的,即每 10,000 个区块的时间相同。
-
是的,但你是推还是拉?
-
这是一个数据流,还是您将数据登陆到文件然后批量插入?如果您可以分享配置方式,我会很好。另外,目标表是否有索引和约束?你是如何从 oracle 中提取数据的?
-
@MarkWojciechowicz 更新了回答您的一些问题的问题。
标签: sql-server oracle ssis