从SQL Server到Oracle的SSIS性能与带有链接服务器的OpenQuery的比较

时间:2019-03-28 18:56:08

标签: sql sql-server oracle ssis linked-server

我们在SQL Server环境中定义了一个链接服务器(OraOLEDB.Oracle)。 Oracle 12c,SQL Server2016。SQLServer上还安装了一个Oracle客户端(64位)。

从Oracle检索数据时(一个简单的查询,从3M行,相当狭窄的表中获取所有列,并带有varchar,日期和整数),我们看到以下性能数字:

sqlplus:从Oracle> SQL Server本身上的OS文件中选择 小于2k行/秒

SSMS:插入到SQL Server表中,使用OpenQuery从Oracle中选择(直通Oracle,因此可以远程执行) 小于2k行/秒

SQL导出/导入工具(本质上是SSIS):插入到SQL Server表中,使用OLEDB Oracle作为源,使用OLEDB SQL Server作为目标 每秒超过3万行

寻找使用OpenQuery / OpenResultSet来提高吞吐量以匹配SSIS吞吐量的方法。某处可能有一些缓冲区/标志可以实现相同的效果?

请告知...

谢谢!

-亚历克斯

2 个答案:

答案 0 :(得分:2)

我认为有很多方法可以提高INSERT查询的性能,建议阅读以下文章以获取有关数据加载性能的更多信息。

您可以尝试使用一种方法,该方法是通过使用聚集索引来最大程度地减少日志记录。请查看下面的链接以获取更多信息:

答案 1 :(得分:0)

  

在某处可能有一些缓冲区/标志可以实现相同的功能?

可能正在寻找FetchSize参数

  

FetchSize-指定提供程序将在以下位置获取的行数   时间(获取数组)。必须根据数据大小和   网络的响应时间。如果该值设置得太高,则此   在执行查询期间可能会导致更多的等待时间。如果   值设置得太低,则可能导致更多回合   前往数据库。有效值为1至429,496和296。   默认值为100。

例如

exec sp_addlinkedserver N'MyOracle', 'Oracle', 'ORAOLEDB.Oracle', N'//172.16.8.119/xe', N'FetchSize=2000', ''

例如参见https://blogs.msdn.microsoft.com/dbrowne/2013/10/02/creating-a-linked-server-for-oracle-in-64bit-sql-server/