跳到摘要版本的最后一段
我正在处理 SQL Server 2008 R2 Express 安装。我有一个相当复杂的存储过程。根据输入,它可能返回 6500 条记录。
每条记录都是一个网络订单。它返回 80 个字段。此外,还有一些分组来总结 SPROC 本身的行项目信息和复杂的过滤。这个查询几乎总是在 2 秒内运行。
有时,当查询以最少量的过滤运行时,会导致所有 6500 行都返回,数据库服务器会进入某种错误状态。
CPU 峰值达到 100% 并保持在那里。有时它会在几分钟后退出此状态,有时它会一直保持到我重置 SQL 服务。
如果我在此错误情况下重置 SQL 服务,然后再次运行查询,通常我将能够运行一百次而不会重复出现错误情况。然而,随着数据库老化(和扩展),这种错误情况变得越来越普遍。
这是我所知道的
我已经分析了执行计划,并且可能在相应表中的相应字段上有索引
这些索引每晚重建
平均而言,错误状态持续的时间比以前长。
当此错误条件刚刚发生时(在重置 SQL 服务之前),重建索引似乎会有所帮助。我在这里包括这个是因为它可能与内部统计数据有关?通常情况下,我现在只需要重置 sql 服务。
据我所知,执行计划看起来相对健康。您可以在此处查看计划中最繁忙的季度:http : //i.imgur.com/bwAFn.png 注意:由于 3 个带下划线的项目,我显示了这一部分。
在更强大的硬件上,我没有遇到过这种错误情况。由于各种原因,我需要保留生产版本的有限硬件。
数据库属性:

我的托管资源相当少。
话虽如此,数据库服务器几乎一直都是“快乐”的,除非这个错误条件是由这个特定的 SPROC 触发的。
我真的不能在这里显示我的代码,尽管我很想。
我想知道是否正在触发某种内部维护?SQL Server 是否有可能进入无限循环?(我在我的代码中没有使用循环)。
有没有一套好的调试处理这种情况提示:?
有时,当查询运行时,它会触发 SQL Server 使用 100% CPU 90 …