SQL Server目标与OLE DB目标

Jan*_*a P 2 sql-server oledb ssis etl bulkinsert

我正在使用OLE Db目标批量导入多个平面文件。经过一些调整之后,我最终将SQL Server Destination的速度提高了25%-50%。

尽管我对这个目的地感到困惑,因为网络上存在矛盾的信息,但有人反对它,有人建议使用它。我想知道,在将其部署到生产之前是否有任何严重的陷阱?谢谢

Had*_*adi 5

在此答案中,我将尝试提供SSIS官方文档中的信息,并提及我在SQL Server目标方面的个人经验。

1. SQL Server目标

根据官方的SQL Server目标文档

SQL Server目标连接到本地SQL Server数据库,并将数据批量加载到SQL Server表和视图中。您不能在访问远程服务器上的SQL Server数据库的程序包中使用SQL Server目标。而是,程序包应使用OLE DB目标。

SQL Server目标提供了与批量插入任务所提供的向SQL Server相同的高速数据插入。但是,通过使用SQL Server目标,程序包可以在将数据加载到SQL Server之前将转换应用于列数据。

要将数据加载到SQL Server中,应考虑使用SQL Server目标而不是OLE DB目标

2. OLEDB目的地

根据OLEDB Destination官方文档

OLEDB目标-快速加载选项:将数据加载到OLE DB目标中的表或视图中,并使用快速加载选项,该选项针对批量插入进行了优化

3. OLEDB目标与SQL Server目标

根据SQL Server目标与OLE DB目标-MSDN主题

前集成服务集团项目经理Donald Farmer说,使用,您可以将性能提高5%到10%SQL Server Destination

此外,请参考Microsoft数据集成专家Matt Masson的以下帖子,他在其中回答了以下问题:

我应该使用SQL Server目标吗?

答案是

没有

...

我的建议是,如果您需要性能的每一点(在10个小时的负载下,性能提高10%可能非常重要),请尝试使用SQL Server Destination来查看它如何为您工作。但是,请记住SQL Server目标的以下限制:

  • 您必须将SSIS与目标数据库运行在同一台计算机上
  • 您必须以管理员身份运行软件包
  • 出现问题时很难调试

考虑到这些限制,即使您发现SQL Server Destination的性能有所提高,我还是建议使用OLE DB Destination。

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的命名管道连接。这意味着OLE DB目标与SQL Server目标不同,可以在除批量加载目标以外的其他计算机上运行。因为使用OLE DB目标的Integration Services程序包不需要在SQL Server计算机本身上运行,所以可以使用主力服务器扩展ETL流。

3.2。个人经验

(更新@ 2019-03-25)

由于此问题已被许多人用作参考,并且在该领域有更多经验之后,我添加了本节以提及我在使用SQL Server目标服务器方面的个人经验。

尽管官方文档提到SQL Server目标将提高性能,但由于许多原因,我不建议使用此组件:

  1. 它要求目标服务器和ETL服务器相同(仅适用于本地SQL服务器)
  2. 它总是抛出没有任何意义的异常
  3. 在对大量数据进行测试之后,与OLEDB目标的性能差异可以忽略不计(对大约500 GB的数据块进行加载测试,时间差异小于一分钟)

您还可以参考以下帖子(来自@billinkc)以获取有关此主题的更多信息:


4。结论

根据Microsoft的文章,您可以说可以SQL Server Destination提高插入数据的性能(它使用BULK插入),但是它是针对特定情况(即本地SQL服务器而设计的。OLEDB Destination在其他情况下更通用,建议在其上使用Fast Load数据访问模式(也使用BULK插入)OLE DB destination这将提高数据加载的性能。

另一方面,根据我的经验以及SSIS专家撰写的许多文章,完全不建议使用SQL Server Destination,因为它不稳定且经常引发异常并且性能可以忽略不计。


附加信息

最近,我发表了有关该主题的详细文章。您可以在以下位置检查它: