在Server中,我得到以下错误:“由于此查询的估计成本(5822)超过了配置的300阈值,查询已被取消。请与系统管理员联系。”
这是存储过程执行的结果,这非常复杂。对于其他存储过程,我没有遇到这种情况,只有这个。是否有可能以某种方式更改这一过程的查询成本?在执行时,我可以在存储过程本身中这样做吗?还是我必须只在服务器上定义这个?
我使用ADO.NET命令来执行存储过程。
谢谢。
发布于 2012-11-21 13:50:27
听起来你好像遇到了查询调控器成本限制。正在发生的情况是,数据库引擎显示您的查询将需要5822秒(97分钟)才能运行。但是,有人已经配置了一个设置,以杀死任何预期运行超过300秒(5分钟)的查询。
要查看这是否适用于您,exec sp_configure 'query governor cost limit',并查看该run_value是什么。我的想法是,它现在被设置为300。
如果您不想全面更改限制,您应该能够通过预先设定限值:set query_governor_cost_limit 0运行这个查询。这将调整特定的会话以关闭任何成本限制,因为您知道您的查询会超出限制,您不会太在意。请注意,运行该语句需要一些严肃的权限( MSDN文档说sysadmin)。
发布于 2012-11-21 13:57:28
管理员已将全局查询调控器成本限制配置为300 (5分钟)。似乎是一个不错的保护,以防止未优化的过程正在部署。您已经部署了这样一个未优化的过程,并被捕获。你的行动应该是优化程序。找出过程中的哪个查询有如此高的成本(成本是每个查询,而不是每个过程),查看您缺少的索引并修复它。不要问如何规避(合理的)最大值,以及如何允许使用估计成本近2小时的查询.
https://dba.stackexchange.com/questions/29055
复制相似问题