查询已取消,因为此查询的估计成本超出配置的阈值

时间:2009-11-30 10:52:19

标签: sql sql-server sql-server-2005 tsql

  

查询已被取消,因为此查询的估计成本(1660)超过了配置的阈值1500.请与系统管理员联系。

我在运行其中一个存储过程线程时遇到如上所述的错误,其中参数包含XML变量。

我已检查QUERY_GOVERNOR_COST_LIMIT的配置值设置为1500。 为了解决这个问题,我在存储过程中添加了SET QUERY_GOVERNOR_COST_LIMIT 0。它工作正常。

当我使用和不使用SET QUERY_GOVERNOR_COST_LIMIT 0语句在后端运行存储过程时,它运行正常,并在0秒内运行。 但是它会导致.Net应用程序出现问题并出现错误。

那么,为什么它会给应用程序而不是SQL查询分析器提供错误? 甚至查询在0秒内运行,因为它可以在执行时间超过15秒时给出错误(如配置QUERY_GOVERNOR_COST_LIMIT 1500)?

请分享您对分析和解决方案的想法。

3 个答案:

答案 0 :(得分:1)

可能是因为SET ARITHABORT从.NET中关闭

也可能是转化问题,看看你的执行计划你看到任何转换。你是如何从.NET执行的?你使用的是正确的数据类型吗?

答案 1 :(得分:0)

通常会发生这种情况,因为SSMS和.net的默认ANSI设置不同 他们可以创建不同的执行计划。 您需要检查的第一个是来自两个来源的执行计划。 你可以使用sql profiler的Showplan XML event

来做到这一点

答案 2 :(得分:0)

QUERY_GOVERNOR_COST_LIMIT是连接级别的运行时设置。因此,在建立连接时需要设置。在SSMS查询窗口中测试时,需要在QueryOption属性窗口中设置此设置(在查询窗口内右键单击,QueryOptions,Advance,...)

您还提到查询在0秒内执行,那么为什么即使从.NET中它也会在设置为15秒时出错?因为该设置适用于估计查询执行成本,而不是实际成本。所以正确的问题是为什么sql server估计执行成本超过15秒。这个没有单一的答案。

虽然我想知道您实际需要使用此设置的用户工作流程/情况。很多时候估计的成本与实际不同,所以除非dev / dba确切地知道他们在做什么以及将要执行什么......看起来我不明白这个设置的实际用法。