LINQ to SQL:CPU使用率太高:当有多个用户时会发生什么

sol*_*man 1 .net cpu sql-server-2005 linq-to-sql

我正在使用LINQ to SQL并看到我的CPU使用天空火箭.见下面的截图.我有三个问题

  • 我该怎么做才能减少这种CPU使用率.我做了剖析,基本上删除了一切.将每个LINQ to SQL语句转换为编译查询会有帮助吗?

  • 我还发现即使使用编译查询,像ByID()这样的简单语句在3.25GB RAM 3.17GHz的服务器上也需要3毫秒 - 这在功能较弱的计算机上会变慢.或者编译后的查询越多,使用的越快?

  • 对于单个用户,CPU使用率(在本地服务器上为12-15%)将乘以访问服务器的用户数 - 当应用程序放在实时服务器上时.即一次2个用户将意味着15*2 = 30%的CPU使用率.如果是这种情况,那么我的应用程序一次限制为最多4-5个用户.或者没有LINQ to SQL .net共享一些CPU使用率. alt text http://www.freeimagehosting.net/uploads/5f10e1f694.png

Mar*_*ers 6

轮廓.轮廓.轮廓.

配置文件以确切了解哪个查询占用了最多资源并提高了该查询的性能.您可以使用DataContext的Log属性来查看SQL - 请参阅此文章.您可以在SQL Server中获取查询的查询计划 - 请参阅此文章.

改进查询的方法示例:

  • 添加缺失的索引.
  • 重写查询以利用已存在的索引.
  • 不要为每个查询获取太多数据 - 使用分页并仅在请求时获取更多行.不要获取您不需要的字段.
  • 不要为每个查询获取太少的数据 - 不要一次循环获取一行.一次获取多行.

完成后,再次进行配置以检查是否已提高该查询的性能.如果没有,请重复直到你有.

然后再次进行配置以查看下一个杀手级查询是什么,并重复该过程,直到您的性能可以接受为止.

您说您已经进行过分析,但是您还没有发布任何分析信息,例如查询,查询计划,执行时间,查询频率等.如果没有更多的分析信息,我们所能做的就是猜测.