我正在使用链接服务器查询
从MSSQL
到mySql
。
要查询的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>
这是延迟的合理解释吗?
答案 0 :(得分:1)
调试MSDTC问题可能有点痛苦。你说它正在运行,它是否在两台服务器上运行?服务器之间是否有防火墙 - 您必须确保每台服务器都可以对另一台服务器进行DTCP。 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无关。