我正在使用从MSSQL到mySql的链接服务器查询。要查询的MySql表有800 K以上的记录
我使用临时表从链接服务器中提取结果,并在该临时表上为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完成的)-第二种方法目前给了我一个错误:
OLE DB提供程序"MSDASQL“用于链接服务器"My_Linked_Server”返回消息"MySQLOptional功能不受支持“。无法执行操作,因为OLE DB提供程序"MSDASQL“用于链接服务器"My_Linked_Server”无法开始分布式事务。
DTC已启动
使用它的另一个问题是,我得到了结果的随机定时,1秒到1分
提前感谢!
更新:
第一种方法取得了很好的效果。剩下的唯一问题是结果的随机定时。超过80%的时间,结果是即时的。这可能是由于MySql表锁(MyISAM类型的表)造成的,因为对该表有不断的写入,以及在SQL Server查询MySQL中运行的其他作业,以获取使用信息。
这是延误的合理解释吗?
发布于 2013-09-10 12:47:06
调试MSDTC问题可能有点痛苦。你说它在运行,是在两台服务器上运行吗?服务器之间是否有防火墙--必须确保每台服务器都可以DTCPing另一台服务器。DTCPing是您可以下载的MS实用程序。你也可能有权限问题。
DTC的性能有时可能非常糟糕,但这通常是由于带宽和往返时间问题,或者如果事务很大的话内存消耗。据我所知,它总是比非MSDTC等价物慢--假设它们实际上是等价的。
就我个人而言,如果我可以重写查询以完全避免MSDTC,我通常会对结果感到更高兴。如果在远程服务器上插入exec proc的输出,则将始终调用MSDTC。
没有关于随机时间的真正建议,也许你可以更详细地解释。
从这篇文章添加了DTC的信息
DTCPING对远程计算机进行匿名RPC调用
从xp,sp2,默认情况下,远程机器不接受匿名调用,因此它给您拒绝访问错误消息(OX5错误代码)。
如果禁用RestrictRemoteClients密钥,远程计算机将接受匿名调用。
这只是DTCPING工具的问题,这个错误与DTC无关。
https://stackoverflow.com/questions/18718473
复制相似问题