我有一个表,并且我正在使用merge语句进行任何插入或更新 所以我有一个MVC4 webapi托管作为接受AJAX调用的服务。 在接收ajax调用时,我使用实体框架来调用存储过程 在存储过程中,我使用Merge来判断该行是否存在然后更新else插入 我在一张桌子上使用合并。 开发一切都很好 但是在运行浸泡负载测试时,5小时后我们会在Web服务器上看到w3wp的高CPU。 大约7个小时后,我们看到DB中有大约190万行 我们截断了表并再次开始测试1小时,CPU恢复到5到7%左右 因此,如果行数增长超过某个限制,应用程序可能会导致高CPU。 此时,我们注意到的唯一一点是,当DB中的行数增加时,CPU会加速。 这只是一个分析。我们还没有证明这一点。 该表具有主键,其由2个字段组成 一个是存储asp.net sessionid的sessionid(varchar32) 和一个名称列(varchar(128) 这2个字段组成主键并且是聚簇索引 每个浏览器实例都会发送asp.net sessionid和每个请求的名称,并根据该名称插入或更新记录。 我在想如果存储过程可以导致Web服务器中的高CPU。 SQL存在于不同的框中 任何建议都会有所帮助
答案 0 :(得分:0)
我的猜测是你必须在应用程序的某个地方枚举linq查询中的表的所有元素。初级开发人员不知道IQueryable和List之间的区别。