链接服务器查询性能下降

时间:2013-09-10 12:03:00

标签: mysql sql-server parameters linked-server

我正在使用链接服务器查询 从MSSQLmySql。 要查询的MySql表有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)驱动程序]不支持可选功能”。   Msg 7391,Level 16,State 2,Line 14操作不可能   执行因为OLE DB提供程序“MSDASQL”为链接服务器   “My_Linked_Server”无法开始分布式事务。

启动DTC

使用此问题的另一个问题是我在1秒至1分钟的结果上获得随机计时

提前致谢!

更新

第一种方法给出了非常好的结果。剩下的唯一问题是结果的随机时间。超过80%的时间结果是即时的。这可能是由于MySql表锁(类型为MyISAM的表)所致,因为此表和SQL Server中的MySQL查询{{1}}用户信息时,正在运行其他作业。 / p>

这是延迟的合理解释吗?

1 个答案:

答案 0 :(得分:1)

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

DTC性能有时可能非常糟糕,但这通常是由于带宽和往返时间问题或内存消耗(如果事务很大)。据我所知,它总是慢于非MSDTC等效 - 假设它们实际上是等价的

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

对随机时间没有真正的建议,也许你会更详细地解释。

this article

添加了有关DTC Ping的信息

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

从xp,sp2,默认情况下,远程机器不接受匿名调用,因此它会给你拒绝访问错误消息(OX5错误代码)

如果禁用RestrictRemoteClients密钥,远程计算机将接受匿名呼叫

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

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