跨数据库查询在SQL Server中是否昂贵?


15

跨数据库查询在SQL Server中是否昂贵?所有数据库都在同一实例中。


3
我从来没有发现任何证据表明它们是。我什至想到(但未经测试)的唯一例外是(a)优化器无法从无法明确的关系中受益(例如,它可以从外键定义中受益,而外键定义不能交叉存在) -database)或(b)链接服务器上的统计信息存在问题,但我想即使在跨数据库的情况下,运行查询的用户也可能看不到统计信息。不知道(b)是否真实-尚未测试,只是知道跨服务器可能是一个严重的问题。
亚伦·伯特兰

2
我和@AaronBertrand在一起,我还没有看到什么可以肯定地说出很大的成功。我唯一添加的内容可能是某种形式的身份验证操作,但我怀疑它是否有意义。那只是我大声思考,我不确定。最好的选择是使用跨数据库,然后使用相同的查询数据库间来建立自动测试/基准测试,并运行该测试数千次。获取平均值,最大值等,并据此做出决策。
Thomas Stringer

1
通过查看实际的查询计划,@ thomas能否确定地看到差异?
Max Vernon

@乔纳森:“昂贵”的定义是相对于替代品。那么,您正在尝试做什么以及您在两者之间决定什么?没有更多的信息,很可能会从表面上获得对这个问题似乎正确的答案,但同时对于您的情况绝对是错误的。一切都有成本,但是根据您要比较成本,该成本可以便宜也可以昂贵。而查询费用(即时间,争等)需要对维修成本,硬件成本等进行权衡
所罗门Rutzky

我想知道与同一个表中的查询相比的成本。
乔纳森·艾伦

Answers:


6

抱歉,我没有足够的声誉来评论这个问题,但是根据我的经验,如果客户端应用程序为使用跨数据库联接的查询引发事务,那么它将促进事务的分布式并产生DTC事务的开销。

在这种情况下,DTC开销可视为性能的负面影响。通常,尽管Microsoft将DTC交易描述为:

分布式事务通常会消耗大量系统资源

交易推广

...如果服务器无法提供所需的资源,则可能会导致性能下降。

为了澄清起见,上面的文章描述了引入远程系统时正在促进的本地事务,但是我已经看到在使用跨数据库查询时同一服务器上的事务变得如此。

正如Thomas Stringer在其评论中指出的那样,身份验证会产生额外的开销,尽管我认为这将是SID驱动的,因此那里的开销将很小,除非您必须使用单独的凭据来访问其他数据库。

如果数据库设置存在差异,这会导致联接中的额外开销,这可能会比以前的建议产生更大的影响,例如数据库排序规则。数据库整理可以体现为功能上的差异,而不仅仅是性能上的差异。

我认为Aaron对于性能的最强论据是优化器没有利用跨数据库查询使用关系的优势,而自包含在数据库中则可以利用关系来获得优势。



1
交易促进文章适用于CLR交易。
stacylaray 2014年

-2

在SQL Server 2014中,内存优化表不支持跨数据库事务。您不能通过同一事务或同一查询访问另一个数据库,该数据库也访问内存优化表。您无法轻松地将数据从一个数据库中的表复制到另一个数据库中的内存优化表。http://msdn.microsoft.com/zh-cn/library/dn584627(v=sql.120).aspx数据库镜像/ AOAG不支持分布式和跨数据库事务。http://technet.microsoft.com/zh-cn/library/hh393530.aspx。如果要使用所有权链接,请注意安全风险http://msdn.microsoft.com/zh-cn/library/ms188676.aspx


这仅适用于“跨多个实例或服务器的资源”的方案。在这种情况下,我们正在谈论具有多个数据库的单个实例。
乔纳森·艾伦

1
我的糟糕...我错过了有关它在同一实例中的部分
stacylaray 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.