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

mud*_*unk 4 ssis

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

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

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

  • 将所有源流和目标流划分为单独的数据流任务
  • 将它们分成大小和行数大致相同的组
  • 保持原样,只需确保设置具有足够缓冲区行和缓冲区大小的属性,同时设置每个批次的行数和到各个目标的最大插入提交大小

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

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

Fer*_*pux 6

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

根据我的经验,典型用法:

  • DefaultBufferMaxRowsDefaultBufferSize控制数据流管道的批量大小。调整它是一个权衡 - 更大的批次意味着更少的批次处理开销,即更少的执行时间,但更多的 RAM 消耗。更多 RAM 意味着您可能会遇到 RAM 中断,并且 DFT 数据缓冲区将交换到磁盘。
    在 SSIS 2016+ 中,有一个“神奇的设置” AutoAdjustBufferSize,它告诉引擎自动增长缓冲区。
    这些属性的值通常是在 QA 环境中的性能测试中定义的。在开发时 - 使用默认值。
  • 每批行数最大插入提交大小- 控制日志增长和回滚所有更改的可能性。除非确实需要,否则不要更改它们。一般默认即可;由于特殊原因,我很少更改它。更多关于它的功能

关于包装设计:

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

作为底线,保持简单——每个 DFT 一对源-目标,并且仅在必要时才使用您的参数。


归档时间:

查看次数:

1213 次

最近记录:

6 年,1 月 前