【问题标题】:optimizing SSIS 2008 package优化 SSIS 2008 包
【发布时间】:2012-09-08 14:14:19
【问题描述】:

我们正在处理 SQL Server 数据库中的大数据,
现在包执行需要几个小时才能执行。
有什么方法/技术可以优化包的执行时间吗?
我知道SSIS Parallelism
还有其他最好的方法吗?

编辑:
我们正在处理超过 2 千万条记录。
SQL 服务器数据库是数据源和目标(在同一台服务器中),我使用了诸如派生列、条件拆分、多播、数据转换、查找、OLEDB 命令、OLEDB 目标、OLEDB 源、合并、合并等转换连接、排序、聚合转换。

【问题讨论】:

  • 就您的问题而言,它相当模糊,无法回答。 “大数据”对您意味着什么?你的瓶颈是什么?包裹在哪里花费时间?您的数据流是什么样的?您的数据类型是什么?
  • 补充比尔的问题...数据源在哪里?目的地在哪里?你正在执行什么样的转换?

标签: sql-server-2008 ssis execution-time


【解决方案1】:

【讨论】:

    【解决方案2】:

    查看任何需要您对数据进行排序的任务,这些任务通常会减慢速度。例如,不要使用合并连接,而是使用作为带有连接的查询的数据源。

    【讨论】:

      【解决方案3】:

      一篇关于在 SSIS 中使用不同类型转换的含义的非常好的文章: Non-Blocking, Semi-Blocking and Fully-Blocking components in SSIS

      基本上,如果您在包中使用排序或聚合,您将完全停止这些组件,直到每一行都被它们消耗,然后再将任何行传递给下一个组件。仅当您在数据流中没有其他选择时才使用这些。

      像 Merge 和 Merge Join 这样的半阻塞组件会为正在通过的行创建一个新缓冲区,因此在内存中创建缓冲区时会产生开销。在您的代码中谨慎使用它。

      非阻塞可让您最大限度地提高吞吐量

      【讨论】:

        【解决方案4】:

        避免半阻塞组件。

        将 SQL 任务组件用于合并、排序、聚合函数

        在 OLE DB Destination 中将 Row per batch 和 commit size 设置为 10000。

        在 OLE DB 目标中设置数据访问模式(表或视图快速加载)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-12
          • 2011-05-29
          相关资源
          最近更新 更多