[英]SQL Server linked server performance
我正在使用SQL Server 2008 Enterprise。 我正在使用链接服务器技术从另一台服务器链接另一个SQL Server 2008 Enterprise实例。 我编写TSQL来处理来自两个服务器实例的对象(例如表)。
我的问题是,对于链接服务器,是否存在很大的性能问题? 如果是,我们应遵循的关键性能瓶颈和最佳实践是什么?
乔治,提前谢谢
我的问题是,对于链接服务器,是否存在很大的性能问题? 如果是,我们应遵循的关键性能瓶颈和最佳实践是什么?
相比什么? 有什么疑问? 当然这一切都取决于你在做什么。 对于某些查询,对于其他大量的搜索,性能损失可以忽略不计。
你应该记住一些问题:
在过去,我发现在本地移动远程数据的速度要快几个数量级,并在加入之前对其进行索引。
这取决于你在做什么。
如果您正在运行在两个服务器实例中的表之间连接的查询,并传输大量数据,那么您有一个需要注意的瓶颈。
如果服务器位于拥有1GB链接的自己的子网上,那么您不必担心太多问题。 如果两个服务器通过共享的慢速链接连接,我会担心。
你需要点击一下才能将结果传输两次(将服务器连接到SQL Server到你的机器)。 其次,它必须解析名称并登录,这不是很重要,但它仍然是一个打击。
无论如何,我发现唯一的主要瓶颈是跳跃服务器,因为它必须传输两次信息。
我经常使用链接服务器在环境之间同步数据,主要是因为我发现它是最简单的代码和管理解决方案。
我找到的一个提示,但可能不是其他人的选择,是在服务器上运行具有最多数据或正在进行最多更新/插入的任何过程。 例如,我有一个过程比较两个表和插入/更新从A到B.如果我在服务器A上运行它,它将比在B上运行过程花费很多倍。如果你没有选择在哪里运行我们的代码,你被卡在服务器A上,然后这个建议可能没有帮助。
另一个提示是将返回的数据减少到必要的最小值。 虽然您通常可以在本地服务器上立即返回数据,但如果链接服务器距离较远,那么延迟可能会非常痛苦。 在访问您需要的列时要比正常更严格。
我发现如果你正在进行外连接(左/右),性能会快速下降。 有时候从远程服务器中选择数据到临时表并对其进行索引而不是通过网络加入有时会更快。 大多数情况下,最好的策略是以有意义的方式编写查询,然后只在性能成为真正问题时才调整查询。
@ George2,
Sam Saffron在这种情况下是正确的。 在本地执行连接时,SQL Server使用索引执行连接,然后查找未包含在索引定义中的列。
使用链接服务器进行连接,首先需要从远程服务器传输所有表,然后执行连接。 这是一个瓶颈。 如果您可以在将所有远程表连接到本地表之前对其进行预过滤,那么它将显着提高性能(例如,选择具有良好过滤器的#temp表以减少行数),然后如果您需要对该表执行多个操作,那么最好立即创建一个索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.