2

我正在使用从MSSQL到的链接服务器查询mySqlMySql要查询的表有800K+记录

我正在使用临时表从链接服务器中提取结果并在该临时表上进行连接以进行 SQL 查询

两者之间是否存在性能差异:

Declare
@MyString varchar(max),
@Address varchar(20),
@tempTable (Address, ColumnB, ColumnC)


set @MyString  = 'Select Address, ColumnB, ColumnC from schemaname.tablename where ''' + convert(varchar(30),@Address) + ''') order by ColumnB desc limit 10'

set @MyString  = 'Select * from Openquery([My_Linked_Server], ''' + REPLACE(@MyString, '''', '''''') + ''')'

insert into @tempTable
exec (@MyString) 

Set @MyString = 'Select Address, ColumnB, ColumnC from schemaname.tablename where ''' + convert(varchar(30),@Address) + ''') order by ColumnB desc limit 10'

exec (@MyString) at My_Linked_Server

(所有这些都是在 中完成的SQL)--第二种方法目前给我一个错误:

链接服务器“My_Linked_Server”的 OLE DB 提供程序“MSDASQL”返回消息“[MySQL][ODBC 5.2(w) Driver]Optional feature not supported”。消息 7391,级别 16,状态 2,第 14 行操作无法执行,因为链接服务器“My_Linked_Server”的 OLE DB 提供程序“MSDASQL”无法开始分布式事务。

DTC 已启动

使用它的另一个问题是我在结果上随机计时 1 秒到 1 分钟

提前致谢!

更新:

第一种方法给出了相当好的结果。剩下的唯一问题是结果的随机时间。超过 80% 的结果是即时的。这可能是由于MySql表锁(类型为 的表MyISAM)造成的,因为不断写入此表以及在SQL Server查询MySQL使用信息时运行的其他作业。

这是延迟的合理解释吗?

4

1 回答 1

2

调试 MSDTC 问题可能有点痛苦。你说它正在运行,它是否在两台服务器上都运行?服务器之间是否有防火墙 - 您必须确保每台服务器都可以 DTCPing 另一台服务器。DTCPing 是一个可以下载的 MS 实用程序。您也可能遇到权限问题。

DTC 性能有时可能会非常糟糕,但这通常是由于带宽和往返时间问题,或者如果交易量很大,则存在内存消耗。据我所知,它总是比非 MSDTC 等价物慢——假设它们实际上是等价的

就个人而言,如果我可以重写查询以完全避免 MSDTC,我通常对结果更满意。如果您在远程服务器上插入 exec proc 的输出,则将始终调用 MSDTC。

如果您更详细地解释,也许没有关于随机时间的真正建议。

从本文中添加了有关 DTC Ping 的信息

DTCPING 对远程机器进行匿名 RPC 调用

xp,sp2,默认情况下,远程机器不接受匿名呼叫,所以它给你访问被拒绝的错误信息(OX5错误代码)

如果禁用 RestrictRemoteClients 键,远程机器将接受匿名呼叫

http://msdn.microsoft.com/security/productinfo/XPSP2/networkprotection/restrict_remote_clients.aspx

这只是 DTCPING 工具问题,此错误与 DTC 无关。

于 2013-09-10T12:47:06.630 回答