C# SQL Server高频插入

C# SQL Server高频插入,c#,sql-server,wcf,entity-framework,C#,Sql Server,Wcf,Entity Framework,我有一个系统,其中数据通过SP插入,该SP通过WCF服务调用 在该系统中,我们目前有12000多名积极登录的用户,他们将每隔30秒调用WCF服务(实际上每秒至少有200个请求) 在SQL Server端,CPU使用率达到了100%,当我检查时,超过90%的时间都花在了DB写入上。这会影响服务器的整体性能 我需要的建议,以解决这个问题,使我们有较少的数据库写入操作和更多的CPU仍然是免费的 如果需要,我愿意集成任何其他DB服务器,使用实体框架或任何其他ORM组合。我需要有解决这个问题的办法 其他可

我有一个系统,其中数据通过SP插入,该SP通过WCF服务调用

在该系统中,我们目前有12000多名积极登录的用户,他们将每隔30秒调用WCF服务(实际上每秒至少有200个请求)

在SQL Server端,CPU使用率达到了100%,当我检查时,超过90%的时间都花在了DB写入上。这会影响服务器的整体性能

我需要的建议,以解决这个问题,使我们有较少的数据库写入操作和更多的CPU仍然是免费的

如果需要,我愿意集成任何其他DB服务器,使用实体框架或任何其他ORM组合。我需要有解决这个问题的办法

其他可能有用的信息: 表没有定义索引 数据库的增长因子设置为200MB。
SQL Server版本为2012。

简单的解决方案:回写。不要每次插入都调用sql server

制作一个服务来收集它们并更粗糙地调用它们。主要的问题是,事务处理的成本有点高——在这种情况下,对它们进行批处理可能是有意义的

不要为每行调用SP,将它们加载到临时表中,然后批量处理它们(或者使用表变量一次向SP提供多行信息)

这样就消除了很多问题,包括大量的提交(基本上要求200个测试程序集,这是非常沉重的,在这里不需要)


如何做到这一点取决于您——但对于如此沉重的事情,我会远离ORM(实体框架在不批处理任何东西方面非常有趣——这应该是大量的sp调用),并至少在这一部分使用手工编制的sql。我喜欢ORM,但在需要时使用高性能手工制作的方法总是很好的。

此SP还检查同一表中的现有记录。您的建议是否可以包含在SP中?任何想法和见解都会很棒。那又怎么样?加载到临时表中,让SP处理临时表,或使用表变量在一次调用中向SP运行成吨的行。我从来没有说过“根本不使用SP”,只是“不要每行使用一个SP”。转向在同一调用中处理一组行。确定。让我看看,我会在这里更新。感谢您的想法@tomtemp表将被自动删除:(@SanketShah)会话级临时表一直存在到事务结束。将ata放在那里,调用过程。