【问题标题】:SSIS Incremental Load PerformaceSSIS 增量负载性能
【发布时间】:2019-09-09 13:41:59
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你从哪里加载数据?
  • SQL 服务器数据库表

标签: performance ssis lookup


【解决方案1】:

我的处理方式是在源查询中使用 LastModifiedDate 从源表中获取自上次导入以来已更改的记录。

然后我会将所有这些记录导入目标数据库服务器上的一个空临时表中。

然后我将执行一个存储过程,从暂存表中的数据执行最终目标表的 INSERT/UPDATE。目标服务器上的存储过程将比在 SSIS 中使用查找和条件拆分快得多。

【讨论】:

  • 我同意性能。如果使用基于时间的修改日期有问题,我已经成功使用 where Id not In destination table。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-21
  • 2019-06-26
  • 2015-04-22
相关资源
最近更新 更多