本文介绍了必须应用的 SSIS 最佳实践列表,以实现生产环境中包的最佳性能。
SSIS 最佳实践
以下是在处理 SSIS 项目时的一些最佳实践,但并不限于此。
- 如果 SSIS 和 SQL Server 运行在同一服务器上,请使用 SQL Server 目标而不是 OLE DB 目标来提高 Integration Services 的性能。
- 如果目标表有分区,请执行并行处理以更快地加载数据。
- 使用 Merge Statement 或查询,而不是单独的 Insert、Update 和 Delete Statements。
- 在加载大量数据时,请尝试删除目标表上的所有索引。加载数据后,重新创建这些索引。此方法将提高性能。
- 在需要时使用 Transactions。
- 使用 NOLOCK 移除锁定。
- 完全避免使用 OLE DB Command transformation。
- 减少临时表操作。
其余 SSIS 最佳实践
除了以上几点,还有一些其他重要的 SSIS 最佳实践,您必须应用它们以获得更好的性能。
选择表列
默认情况下,OLE DB 和 ADO. NET 源允许选择数据库中的表。它使用 Select * From Table 语句。由于缓冲区将填充不需要的列,这会导致实时性能问题。始终通过选择所需列来编写自己的查询。
连接多个表
不要在多个表上使用 SSIS Merge Join Transformation,而是使用查询来编写左、右、内、自和交叉 joins。这样可以避免对输入进行排序的额外步骤(sort transformation)。
数据访问模式
始终使用 SQL Command 并编写查询。否则,选择存储过程。严格避免选择表。
存储过程
如果您有任何更改,使用 SSIS 中的 stored procedures 是最佳实践。
限制行数
使用 Where clause 来限制 select 语句返回的行数。例如,获取特定区域的销售额、上周的订单等。
合并多个表
不要加载多个表的数据并应用 Union All Transformation,而是使用查询中的 Union 或 Union All 运算符。
聚合
避免对拥有数百万条记录的大型数据集执行 aggregations。而是使用查询中的 Group by 语句。
对数据进行排序
由于索引的原因,大多数表在数据库中已经排序。但是,您可以使用 Order By 子句对数据进行排序,而不是使用 sort Transformation。此转换是完全阻塞的,并在内存中进行排序。
数据类型转换
尽量减少数据类型转换。避免它们,并在查询级别执行,以提高性能。
日期时间转换
SSIS 最佳实践之一是尝试在源表或目标表中转换日期和时间。
在“列”选项卡中选中和取消选中字段
将所有列都加载到源组件中,然后取消选中不需要的列是一种不良的做法。因为您已经将列加载到内存中,取消选择它们不会提高性能。始终获取所需的列。
加载时清理数据
如果您从关系数据库加载数据,最好在查询中执行基本的清理操作。例如,替换 null、删除不需要的空格、替换特殊字符等。这比在集成服务中执行更快。在这里,您需要编写表达式并阻塞数据。
快速加载
如果目标表支持快速加载,请使用它。OLE DB Destination 的一个选项是 table or view – fast load,请使用它。
避免阻塞转换
从以上所有 SSIS 最佳实践步骤中,您可以了解到我们始终提到了阻塞转换的替代方案。始终避免使用阻塞和异步转换,因为它们依赖于内存。
检查点
使用 checkpoints 来了解成功和失败的任务。始终为每个任务将 SaveCheckPoints 属性设置为 True。这样,我们就可以从任务失败的地方重新启动,而不是从头开始执行。
默认缓冲区大小
根据您的需求更改 DefaultBufferSize 和 DefaultBufferMaxRows。尝试试验不同的值,但请记住设置 AutoAdjustBufferSize 属性。
进度条
在包运行时,始终检查 SSIS 进度条以了解最佳实践。它提供了改进性能的各种信息。例如,它会给出有关不需要的列的警告。