链接服务器的替代速度相同



我有一个带有存储过程的框架构建,该过程将数据1到1 fra a oltp移至bi staging区域。它是通用的,只需告诉它OLTP中的哪个表即可构建SQL以移动它。

问题是,它是将链接服务器使用到OLTP服务器的构建。现在,OLTP开始将CLR类型列(例如地理(添加到表中,该列无法通过链接服务器收集。

我一直在寻找OPENROWSET来完成这项工作,以保留存储过程解决方案并做最小的工作

首先,我尝试使用没有CLR列的表尝试,发现通过" MSDASQL"使用ODBC的速度比链接服务器慢4倍(尽管我正在使用SQL Server 2016的最新ODBC驱动程序进行此操作(

( >

如果我在测试环境中使用

OPENROWSET('SQLNCLI', 'Server=my server;Trusted_Connection=yes;' select ...)

速度与链接服务器相同,但是SQLNCli实际上使用了链接服务器。而且,如果我选择具有CLR类型的表,它会按预期失败,因此这不是解决方案。

我知道,如果我开始在SSIS中构建相同的通用设置,我将不会看到这些问题,但需要更长的时间才能开发。我还可以设置复制,日志运输或其他新解决方案,但是在这样做之前,我想确保无法通过更改现有解决方案来完成。

因此,在我开始这样做之前,如果我想更改的只是我的框架中产生的TSQL,您是否有任何建议?(OLTP和BI Server都是SQL Server 2016(

非常简化,当前结果的TSQL是:

SELECT  *
FROM OLTP.BrokerServices.[FLEUR].[InsuredUnemploymentPayment]

其中OLTP是链接的服务器。

我想以这样的方式结束:

SELECT *
FROM OPENROWSET(
                'MSDASQL', 
                'Driver={SQL Server Native Client 11.0}; Server=DFDGSQLCLU2003SQL2016;UID=yyyyyyyyyyyy; PWD=xxxxxxxxxxx;',  
                'SELECT * FROM [BrokerServices].[FLEUR].[InsuredUnemploymentPayment]'
                )

上述工作,但至少比使用链接服务器慢4倍,而且我们没有太多时间。

tia

彼得

我实际上自己找到了答案:-)使用SQLOLEDB代替MSDASQL,给出了我想要的性能,并且可以处理CLR数据类型:

SELECT *
FROM OPENROWSET(
                'SQLOLEDB', 
                'STARDBS1006T16';'yyyyyyyyyy';'xxxxxxxxxxx',  
                'SELECT * FROM [BrokerServices].[FLEUR].[InsuredUnemploymentPayment]'
                )

很抱歉,但是我会留下问题,以防万一其他人有同样的问题

最新更新