SSIS增量负载性能

时间:2019-09-09 13:41:59

标签: performance ssis lookup

我有一个表,该表包含约80万条记录和约100个字段。 该表具有一个ID字段,该字段是唯一的NVACHAR(18)类型。 该表还具有一个名为LastModifiedDate的字段,其中包含所做的最新更改。

我正在尝试根据以下条件执行增量加载:

  • 所有数据的初始加载(发生一次)
  • 基于LastModifiedDate,仅加载最近更改/添加的记录(约30k)
  • 基于键字段(ID),对最新数据到现有数据执行INSERT / UPDATE (*)假设未删除记录 我正在尝试通过执行以下步骤来实现这一目标:
  • 截断临时表(其中包含最新数据)
  • 提取最近的数据并将其存储在临时表中
  • 从临时表中提取数据
  • 使用具有以下定义的查找: 一种。缓存模式=完全缓存 b。连接类型= OLE DB连接管理器 C。没有匹配的条目=忽略故障
  • 从最终表中选择ID,并将其链接到temp表的ID字段中,并为新文件提供输出别名LKP_ID
  • 使用条件拆分并检查ISNULL(LKP_ID)是否为true表示INSERT,而false表示UPDATE
  • INSERT意味着将临时表中的数据插入到最终表中,而UPDATE则将基于临时表数据执行SQL UPDATE语句

最终结果很好,但是运行时间很糟糕。完成大约需要30分钟

1 个答案:

答案 0 :(得分:0)

我要解决的方法是在源查询中使用LastModifiedDate,以从源表中获取自上次导入以来已更改的记录。

然后,我将所有这些记录导入到目标数据库服务器上的空登台表中。

然后,我将执行一个存储过程,以便根据登台表中的数据对最终目标表进行INSERT / UPDATE。与使用SSIS中的“查找”和“条件拆分”相比,目标服务器上的存储过程执行MUCH的速度更快。