我们在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吞吐量的方法。某处可能有一些缓冲区/标志可以实现相同的效果?
请告知...
谢谢!
-亚历克斯
答案 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', ''