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

Ssis 什么是「;“缓冲区大小”&&引用;“最大行数”;与多个源和目标流的关系”;“每批行数”;及;插入提交大小“;?,ssis,Ssis,我有一个数据流任务,它将一组数据从多个源移动到多个目标。总共大约50人。数据从一个数据库移动到另一个数据库,每个流中的行和列都不同 虽然我相信我理解数据流任务的DefaultBufferMaxRows和DefaultBufferSize背后的基本思想,因为它与目标的每批行数和最大插入提交大小有关,我不清楚当存在多个不相关的源和目标流时会发生什么 我想知道的是以下哪项最有意义: 将所有源流和目标流划分为单独的数据流任务 将它们分成大小和行数大致相同的组 保持原样,只需确保设置具有足够缓冲行和缓冲

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

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

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

  • 将所有源流和目标流划分为单独的数据流任务
  • 将它们分成大小和行数大致相同的组
  • 保持原样,只需确保设置具有足够缓冲行和缓冲区大小的属性,同时设置每个批的每个目标的最大插入提交大小
我相信我在某个地方读到,最好将每个源和目标都放在自己的数据流任务中,但我现在无法找到链接


我在网上找到的大多数例子似乎总是一个来源到一个或多个目的地,或者只是一对一。数据流任务是一项任务,用于组织从数据源到数据目标的数据管道。它在SSIS中是唯一的任务,因为它在SSIS中运行数据操作,所有其他任务调用外部系统来处理SSIS中的数据。
关于DefaultBufferMaxRowsDefaultBufferSize之间的关系,因为它与目标的每批行数最大插入提交大小有关。没有直接关系DefaultBufferMaxRowsDefaultBufferSize是数据流管道的属性;管道成批处理行,这些属性控制处理批大小。这些属性控制RAM消耗和数据流任务的性能。
另一方面,每批行数最大插入提交大小是数据目的地的属性,即仅在快速加载模式下的OLE DB目的地;它控制数据目的地本身的性能。您可能有一个具有平面文件目标的数据流,其中每个批不具有,但它肯定具有DefaultBufferMaxRowsDefaultBufferSize属性

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

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

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

作为一条底线,保持简单——每个DFT有一对源-目标,只有在必须这样做的情况下才使用您的参数。

您好,欢迎Brian。虽然你的问题本身很好,而且对于了解主题的人(不是我)来说,回答起来似乎很有趣,但问题的标题似乎有点平淡,可能会妨碍你得到你应得的答案。你会对如何回答一个问题有什么建议吗?可能是“关于SSIS数据流任务属性的问题”?可能只是“在SSIS中,‘缓冲区大小’、‘最大行数’、‘每批行数’和‘插入提交大小’是什么?”非常好的帖子,感谢您花时间回复。如果我要将所有源->目的地移动到单独的DFT中,那么看起来我将有一点工作要做,但这可能是值得的。@BrianBrian除了接受答案外,您还可以对答案进行投票。投票结果-使用2016有一段时间了,刚刚从这个答案中了解到AutoAdjustBufferSize。谢谢!