在这个答案中,我将尝试提供来自 SSIS 官方文档的信息,并提及我对 SQL Server 目标的个人经验。
1。 SQL Server 目标
根据official SQL Server Destination documentation:
SQL Server 目标连接到本地 SQL Server 数据库并将数据批量加载到 SQL Server 表和视图中。您不能在访问远程服务器上的 SQL Server 数据库的包中使用 SQL Server 目标。相反,包应该使用 OLE DB 目标。
SQL Server 目标提供与 Bulk Insert 任务提供的相同的高速数据插入 SQL Server;但是,通过使用 SQL Server 目标,包可以在将数据加载到 SQL Server 之前对列数据应用转换。
要将数据加载到 SQL Server,您应该考虑使用 SQL Server 目标而不是 OLE DB 目标
2。 OLEDB 目的地
根据official OLEDB Destination documentation:
OLEDB 目标 - 快速加载选项:将数据加载到 OLE DB 目标中的表或视图中,并使用快速加载选项,该选项针对批量插入进行了优化
3。 OLEDB 目标与 SQL Server 目标
根据SQL Server Destination Vs OLE DB Destination - MSDN topic:
前集成服务集团项目经理Donald Farmer 表示,使用SQL Server Destination 可以将性能提高5% 到10%。
另外,参考微软数据集成专家Matt Masson的以下帖子,他回答了以下问题:
我应该使用 SQL Server 目标吗?
答案是
否
...
我的建议是,如果您需要所有性能(在 10 小时负载下性能提高 10% 可能很重要),请尝试 SQL Server 目标,看看它如何为您工作。但是 – 请记住 SQL Server 目标的以下限制:
- 您必须让 SSIS 与目标数据库在同一台机器上运行
- 您必须以管理员身份运行包
- 出错时很难调试
鉴于这些限制,我建议使用 OLE DB 目标,即使您发现 SQL Server 目标的性能有所提高。
3.1。数据加载性能指南
(更新@2019-03-25)
在搜索 SSIS 最佳实践时,我发现了一个非常有用的 Microsoft 文章,可以用作参考:
在这篇文章中,他们对包括 SQL Server 目标和 OLEDB 目标在内的所有数据加载方法进行了比较,他们提到:
SQL Server 目标 SQL Server 目标是将数据从 Integration Services 数据流批量加载到 SQL Server 的最快方式。此目标支持 SQL Server 的所有批量加载选项 - ROWS_PER_BATCH 除外。
请注意,此目标需要到 SQL Server 的共享内存连接。这意味着它只能在 Integration Services 与 SQL Server 在同一台物理计算机上运行时使用。
OLE DB 目标: OLE DB 目标支持 SQL Server 的所有批量加载选项。但是,为了支持有序的批量加载,需要一些额外的配置。有关详细信息,请参阅“排序的输入数据”。要使用批量 API,您必须将此目标配置为“快速加载”。
OLE DB 目标可以使用 TCP/IP 和命名管道连接到 SQL Server。这意味着与 SQL Server 目标不同,OLE DB 目标可以在除大容量加载目标之外的计算机上运行。由于使用 OLE DB 目标的 Integration Services 包不需要在 SQL Server 计算机本身上运行,因此您可以使用主力服务器横向扩展 ETL 流。
3.2。个人经历
(更新@2019-03-25)
由于这个问题被很多人用作参考,并且在这个领域更有经验之后,我添加了这个部分来提及我使用 SQL Server 目标的个人经验。
虽然官方文档提到 SQL Server 目标会提高性能,但由于多种原因,我完全不建议使用此组件:
- 要求目标服务器和 ETL 服务器相同(仅适用于本地 SQL 服务器)
- 总是抛出没有任何意义的异常
- 在对海量数据进行测试后,与 OLEDB 目标的性能差异可以忽略不计(在分块加载约 500 GB 数据上进行测试,时间差异小于一分钟)
您还可以参考以下帖子(来自@billinkc),以获取有关此主题的更多信息:
4。结论
根据微软的文章,你可以说SQL Server Destination 提高了插入数据的性能(它使用 BULK 插入),但它是针对本地 SQL 服务器的特定情况而设计的。 OLEDB Destination 更通用,建议在其他情况下使用 Fast Load 数据访问模式(也使用 BULK 插入) OLE DB destination 将提高数据加载的性能。
另一方面,根据我的经验和 SSIS 专家撰写的许多文章,完全不建议使用 SQL Server Destination,因为它不稳定并且经常抛出异常和性能可以忽略不计。
其他信息
最近,我发表了一篇关于这个主题的详细文章。您可以在以下位置查看: