【问题标题】:Performance issue when transferring data from Oracle to SQL Server using a SSIS package使用 SSIS 包将数据从 Oracle 传输到 SQL Server 时的性能问题
【发布时间】: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


【解决方案1】:

问题出在 oracle oledb 驱动程序上。我们之前使用的是 19.0 驱动程序,这给我们带来了这个性能问题。更改为 12.1 驱动程序后,数据加载如下所示。在整个加载过程中,10000 行集大约需要 3-5 秒。

【讨论】:

    猜你喜欢
    • 2019-12-25
    • 1970-01-01
    • 2016-12-04
    • 2011-09-06
    • 2012-09-29
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2018-06-30
    相关资源
    最近更新 更多