ssis - "Buffer Size"和 "Max Rows"与多个源和目标流 "Rows Per Batch"和 "Insert Commit Size"的关系是什么?

标签 ssis

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

虽然我相信我理解数据流任务背后的基本思想 DefaultBufferMaxRows 默认缓冲区大小 因为它涉及到 每批次行数 最大插入提交大小 的目标,我不清楚当有多个不相关的源和目标流时会发生什么。

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

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

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

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

    最佳答案

    让我从基础开始。数据流任务是一项任务,组织从数据源到数据目标的数据管道。这是 SSIS 中的一项独特任务,因为它在 SSIS 本身中运行数据操作,所有其他任务都调用外部系统来处理 SSIS 中的数据。
    关于之间的关系DefaultBufferMaxRows , 默认缓冲区大小 因为它涉及到 每批次行数 最大插入提交大小 目的地。没有直接关系。 DefaultBufferMaxRows 默认缓冲区大小 是数据流管道的属性;管道批量处理行,这些属性控制处理批量大小。这些属性控制数据流任务的 RAM 消耗和性能。
    另一方面,每批次行数 最大插入提交大小 是Data Destination的属性,即仅在Fast Load模式下的OLE DB Destination;它控制数据目标本身的性能。您可能有一个带有平面文件目标的数据流,而您没有 每批次行数 ,但肯定会有 DefaultBufferMaxRows 默认缓冲区大小 特性。

    我的经验的典型用法:

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

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

  • 作为底线,保持简单——每个 DFT 一对 Source-Destination,并仅在必要时使用您的参数。

    关于ssis - "Buffer Size"和 "Max Rows"与多个源和目标流 "Rows Per Batch"和 "Insert Commit Size"的关系是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58104113/

    相关文章:

    sql-server-2005 - 为什么在SQL查询中出现NULL聚合警告会导致SSIS包失败?

    csv - 派生列转换编辑器 - 我需要以递增顺序在订单号末尾添加数字

    sql-server - 哪种方法更适合在 SSIS 中保存错误

    ssis - 刷新 Integration Services 中的目标架构元数据

    c# - 无法设置事件的 Excel 工作表 C#

    file - 仅当文件夹中存在完整文件时才运行 SSIS

    database - 如何修复无法在分布式事务中启用 Sybase 数据库的错误?

    sql-server - 从 Oracle 到 SQL Server 的数据流任务中源和目标的动态列映射

    java - 从 Java 调用 Catalog 过程执行 SSIS 包

    http - 如何从 SSIS 发出 HTTP 请求?