SQLSERVER 2008重复执行select语句会导致CPU占用率过高

时间:2011-03-30 12:07:13

标签: c# sql-server-2008 loops

在我的代码中使用循环来重复执行select语句以获取表格中的实时状态列值是否有其他选择?

这是一个简单的“从dbo.mytable中选择状态”。但是,我不知道为什么这个简单的sql语句在循环上执行时需要这么多的CPU。

现在,循环使sqlserver使用超过50%的CPU。请提出任何替代方案或解决方法。

感谢。

  

编辑:在有人说“你为什么这样做之前”   需要一个循环?“,”不要使用循环“等,   让我解释一下,这不是我的   需求。这是我的   company.Thanks

3 个答案:

答案 0 :(得分:3)

如上所述,我们需要一些代码来正确调试,但这些是我的想法......

这个循环有多快?如果它完全是字面意思

while (x == false) {
x = SQL STATEMENT
}

然后是的,你将导致大量的SQL加载,因为查询将每秒运行数千次。

另一方面,如果你使用计时器并且每隔几秒循环一次,那么这种负载是不寻常的,除非:

  • 有大量客户端使用该应用程序,因此实际上有多个循环同时点击服务器
  • 您正在选择大量数据
  • 您的索引效率不高
  • 您没有突破以前完成的循环导致不必要的负载

最后,您可以考虑在DAL中构建一些缓存,以减少实际进入SQL服务器的查询数量。您可以实现自己的逻辑来执行此操作,也可以使用以下内容:http://bltoolkit.net/Doc.CacheAspect.ashx

答案 1 :(得分:2)

  

为什么这个简单的sql语句需要   这么多CPU

  • 因为它已经是一个循环(没有WHERE条件的SELECT返回所有行)并且不需要在循环上调用
  • 也许是因为你的行太多了
  • 可能是因为status
  • 上没有索引

status 上设置非聚集索引可以极大地提高性能。 原因是SQL Server无需触及表格所有。但是在循环中调用它仍然没有多大意义。

答案 2 :(得分:0)

你的循环多久调用一次语句?

之间存在巨大差异
Foreach day 
  at noon: call query

Foreach millisecond
  call query