繁体   English   中英

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

[英]SQLSERVER 2008 executing a select statement repeatedly causes High CPU usage

除了在代码中使用循环重复执行select语句以获取表中活动状态列的值之外,还有其他选择吗?

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

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

谢谢。

编辑:在有人说“为什么需要循环?”,“不要使用循环”等之前,让我解释一下这不是我的要求。 是我公司的。谢谢

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

这个循环进行的速度有多快? 如果从字面上看

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

那么,是的,您将导致大量的SQL负载,因为查询每秒将运行数千次。

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

  • 有大量使用该应用程序的客户端,因此实际上有多个循环同时到达服务器
  • 您正在选择大量数据
  • 您的索引不是特别有效
  • 您不会中断先前完成的循环而导致不必要的负载

最后,您或许可以考虑在DAL中建立一些缓存,以减少实际进入SQL Server的查询数量。 您可以实现自己的逻辑来执行此操作,或者也许使用类似以下的方式: http : //bltoolkit.net/Doc.CacheAspect.ashx

为什么这个简单的sql语句占用这么多CPU

  • 因为它已经是一个循环(没有WHERE条件的SELECT会返回所有行),因此不需要在循环中调用
  • 可能是因为您的行太多
  • 可能是因为没有status索引

非聚集status索引可以极大地提高性能。 原因是SQL Server根本不需要触摸表。 但是在循环中调用它仍然没有多大意义。

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

两者之间存在巨大差异

Foreach day 
  at noon: call query

Foreach millisecond
  call query

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM