小编Bri*_*ter的帖子

SQL Server Express 平均使用 2-3% 的 CPU,但有时会卡在 100%

跳到摘要版本的最后一段

我正在处理 SQL Server 2008 R2 Express 安装。我有一个相当复杂的存储过程。根据输入,它可能返回 6500 条记录。

每条记录都是一个网络订单。它返回 80 个字段。此外,还有一些分组来总结 SPROC 本身的行项目信息和复杂的过滤。这个查询几乎总是在 2 秒内运行。

有时,当查询以最少量的过滤运行时,会导致所有 6500 行都返回,数据库服务器会进入某种错误状态。

CPU 峰值达到 100% 并保持在那里。有时它会在几分钟后退出此状态,有时它会一直保持到我重置 SQL 服务。

如果我在此错误情况下重置 SQL 服务,然后再次运行查询,通常我将能够运行一百次而不会重复出现错误情况。然而,随着数据库老化(和扩展),这种错误情况变得越来越普遍。

这是我所知道的

  • 我已经分析了执行计划,并且可能在相应表中的相应字段上有索引

  • 这些索引每晚重建

  • 平均而言,错误状态持续的时间比以前长。

  • 当此错误条件刚刚发生时(在重置 SQL 服务之前),重建索引似乎会有所帮助。我在这里包括这个是因为它可能与内部统计数据有关?通常情况下,我现在只需要重置 sql 服务。

  • 据我所知,执行计划看起来相对健康。您可以在此处查看计划中最繁忙的季度:http : //i.imgur.com/bwAFn.png 注意:由于 3 个带下划线的项目,我显示了这一部分。

    • 我已经尝试将这 3 个项目中的 2 个的连接更改为散列连接,但它实际上似乎进一步减慢了速度。
  • 在更强大的硬件上,我没有遇到过这种错误情况。由于各种原因,我需要保留生产版本的有限硬件。

  • 数据库属性:

    在此处输入图片说明

我的托管资源相当少。

  • ~2.5 GHz 单核
  • 1.7 GB 内存
  • 30 GB 驱动器,6 GB 免费

话虽如此,数据库服务器几乎一直都是“快乐”的,除非这个错误条件是由这个特定的 SPROC 触发的。

我真的不能在这里显示我的代码,尽管我很想。

我想知道是否正在触发某种内部维护?SQL Server 是否有可能进入无限循环?(我在我的代码中没有使用循环)。

有没有一套好的调试处理这种情况提示:

有时,当查询运行时,它会触发 SQL Server 使用 100% CPU 90 …

sql-server-2008-r2 sql-server-express

4
推荐指数
1
解决办法
549
查看次数