与多个源流和目标流“每批行数”和“插入提交大小”的“缓冲区大小”和“最大行数”关系是什么?

时间:2019-09-25 17:58:06

标签: ssis

我有一个数据流任务,该任务将一堆数据从多个源移动到多个目的地。总共约50个。从一个数据库移动到另一个数据库的数据,每个流中的行和列都不同。

相信,我了解数据流任务的 DefaultBufferMaxRows DefaultBufferSize 背后的基本思想,因为它与每批行相关目标的最大插入提交大小,我不清楚当有多个不相关的源流和目标流时会发生什么。

我想知道的是,以下哪一项最有意义:

  • 将所有源流和目标流划分为单独的数据流任务
  • 将它们分为行和行数大致相同的组
  • 保持原样,仅在将每批行最大插入提交大小设置为各个< strong>目的地

我相信我读过一些地方,最好将每个源和目标都包含在自己的数据流任务中,但目前无法找到链接。

我能够在网上找到的大多数示例似乎总是针对一个来源到一个或多个目的地,或者只是一对一。

1 个答案:

答案 0 :(得分:3)

让我脱离基础。数据流任务是一项任务,它组织从 Data Source Data Destination 的数据管道。这是SSIS中的一项独特任务,因为它在SSIS本身中运行数据操作,所有其他任务都调用外部系统以对SSIS之外的数据执行某些操作。 关于 DefaultBufferMaxRows DefaultBufferSize 与目标的每批行最大插入提交大小之间的关系。没有直接关系。 DefaultBufferMaxRows DefaultBufferSize 是数据流管道的属性;管道分批处理行,这些属性控制处理批的大小。这些属性控制RAM消耗和数据流任务的性能。
另一方面,每批行最大插入提交大小是数据目标的属性,即仅在快速加载模式下的OLE DB目标;它控制数据目标本身的性能。您可能具有带有平面文件目标的数据流,其中没有每批行,但是它肯定具有 DefaultBufferMaxRows DefaultBufferSize 属性。

我的经验中的典型用法:

  • DefaultBufferMaxRows DefaultBufferSize 控制数据流管道的批处理大小。进行权衡是一个折衷-更大的批处理意味着更少的批处理开销,即更少的执行时间,但更多的RAM消耗。更多的RAM意味着您可能会遇到RAM不足的情况,DFT数据缓冲区将被交换到磁盘。
    在SSIS 2016+中,有一个“魔术设置” AutoAdjustBufferSize ,它告诉引擎自动增长缓冲区。
    这些属性的值通常是在质量检查环境中的性能测试中定义的。在开发中-使用默认值。
  • 每批行最大插入提交大小-控制日志的增长以及回滚所有更改的可能性。除非确实需要,否则不要更改它们。默认值通常可以;我出于特殊原因很少更改它。有关its functions的更多信息。

关于包装设计:

    每个DFT(数据流任务)
  • 1对源-目的地。这是最佳选择-在调整和执行顺序等方面为您提供大部分控制权。您还可以利用SSIS引擎并行执行任务。顺便说一句,它简化了调试和支持。
  • 分组分组。您可以将DFT分组为“序列”组,并通过“表达式-变量”定义通用属性。但是-如果确实需要这样做,请使用它,因为它会使您的设计复杂化。
  • 一个DFT中的所有Source-Destination。我建议不要这样做,因为它很复杂且容易出错。

作为底线,请保持简单-每个DFT一对源-目标,并仅在必须这样做时使用参数。