【问题标题】:SSIS - Merge Join Issue when Inputting to Multiple DestinationsSSIS - 输入到多个目标时合并加入问题
【发布时间】:2017-09-13 13:20:37
【问题描述】:

一个目的地 - 所有合并加入行

两个目的地 - 更少的合并连接行

谁能帮我解释一下这种行为?

我正在生成一个计数字段,然后通过合并连接将其反馈回主流,然后根据计数执行条件拆分。如果没有更新语句,它可以正常工作,但是当我使用条件拆分中的更新语句运行它时,我会得到不同的结果。也许还值得一提的是,数据中没有空值,两张图片也是同一个文件。任何想法表示赞赏。谢谢。

【问题讨论】:

  • 我们应该查看行数吗?在其中一张图片中,包已完成,而另一张图片仍在运行。
  • 是的,我不确定为什么包会少处理 2188 行。在第二张图片中,包会像这样卡住.. 可能正在运行,但我不明白为什么它需要更多处理以更新 8000 行。
  • 您最后通过 OLEDB 命令运行了至少 8977 个单独的更新事务,这需要时间。插入临时表然后进行基于集合的更新通常更快。

标签: sql-server merge ssis etl bids


【解决方案1】:

OLEDB command 没有完成当前批次的行执行时,它的前置组件(condotionnal split) 在他完成处理之前不会发送更多的行等等。这也取决于数据流DefaultBufferSizeDefaultBufferMaxRows

阅读更多Data Flow Performance Features

【讨论】:

    【解决方案2】:

    我想我会更新我学到的东西。似乎加载了多少行(49430 与 52220)的问题是由于 SSIS 中的 DefaultMaxBuffer 大小和 DefaultMaxBuffer Rows 设置。这并没有提高性能,只是将多少记录加载到内存中。

    正如 Martin 上面所说,处理更新的延迟是由于效率低下造成的。对于任何想知道暂存表是什么的人。它只是您在数据库中创建的表的通用术语(或使用 sql 命令任务在 SSIS 中创建表),然后在 SSIS 中使用 sql 命令运行更新语句。如果需要,您可以在更新后将临时表删除到 SSIS 任务中。对于大型更新,我不能低估这为您带来了多少性能提升。

    【讨论】:

      猜你喜欢
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      • 2021-02-24
      • 2013-11-19
      • 2018-11-12
      • 1970-01-01
      相关资源
      最近更新 更多