查询已被取消,因为此查询的估计成本(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
)?
请分享您对分析和解决方案的想法。
答案 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确切地知道他们在做什么以及将要执行什么......看起来我不明白这个设置的实际用法。