我们正在处理 SQL Server 数据库中的大数据,
现在包执行需要几个小时才能执行。
有什么方法/技术可以优化包的执行时间吗?
我知道SSIS Parallelism。
还有其他最好的方法吗?
编辑:
我们正在处理超过 2 千万条记录。
SQL 服务器数据库是数据源和目标(在同一台服务器中),我使用了诸如派生列、条件拆分、多播、数据转换、查找、OLEDB 命令、OLEDB 目标、OLEDB 源、合并、合并等转换加入、排序、聚合转换。
我们正在处理 SQL Server 数据库中的大数据,
现在包执行需要几个小时才能执行。
有什么方法/技术可以优化包的执行时间吗?
我知道SSIS Parallelism。
还有其他最好的方法吗?
编辑:
我们正在处理超过 2 千万条记录。
SQL 服务器数据库是数据源和目标(在同一台服务器中),我使用了诸如派生列、条件拆分、多播、数据转换、查找、OLEDB 命令、OLEDB 目标、OLEDB 源、合并、合并等转换加入、排序、聚合转换。
查看任何需要您对数据进行排序的任务,这些任务通常会减慢速度。例如,不要使用合并连接,而是使用作为带有连接的查询的数据源。
关于在 SSIS 中使用不同类型转换的影响的一篇非常好的文章:SSIS 中 的非阻塞、半阻塞和完全阻塞组件
基本上,如果您在包中使用排序或聚合,您将完全停止这些组件,直到每一行都被它们消耗,然后任何行被传递给下一个组件。仅当您在数据流中没有其他选择时才使用这些。
像 Merge 和 Merge Join 这样的半阻塞组件会为正在通过的行创建一个新的缓冲区,因此在内存中创建缓冲区时会产生开销。在您的代码中谨慎使用它。
非阻塞将允许您最大化您的吞吐量
避免半阻塞组件。
使用 SQL 任务组件进行合并、排序、聚合功能
在 OLE DB Destination 中将 Row per batch 和 commit size 设置为 10000。
在 OLE DB 目标中设置数据访问模式(表或视图快速加载)。