链接服务器查询性能缓慢
Posted
技术标签:
【中文标题】链接服务器查询性能缓慢【英文标题】:Slow performance in linked server query 【发布时间】:2013-09-14 03:17:00 【问题描述】:我正在使用链接服务器查询
从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) Driver]不支持可选功能”。 消息 7391,级别 16,状态 2,第 14 行 由于链接服务器的 OLE DB 提供程序“MSDASQL”而执行 “My_Linked_Server”无法开始分布式事务。
DTC 已启动
使用它的另一个问题是我在结果上随机计时 1 秒到 1 分钟
提前致谢!
更新:
第一种方法给出了相当好的结果。剩下的唯一问题是结果的随机时间。超过 80% 的结果是即时的。这可能是由于MySql
表锁定(MyISAM
类型的表),因为不断写入此表以及在SQL Server
中运行的其他作业正在查询MySQL
以获取使用信息。
这是延迟的合理解释吗?
【问题讨论】:
【参考方案1】:调试 MSDTC 问题可能有点痛苦。你说它正在运行,它是否在两台服务器上都运行?服务器之间是否有防火墙 - 您必须确保每台服务器都可以 DTCPing 另一台服务器。 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无关。
【讨论】:
DTC
它在两台计算机上都启动+防火墙例外...非MSDTC是唯一为我工作的...谢谢您的建议
那么,你能从 A 到 B 和从 B 到 A 进行 DTCPing 吗?
我收到拒绝访问错误消息谢谢...将进一步调查以上是关于链接服务器查询性能缓慢的主要内容,如果未能解决你的问题,请参考以下文章