实体框架只是在INSERT

时间:2017-08-07 13:19:10

标签: sql-server entity-framework insert entity-framework-6 timeout

我有一个小型的c#应用程序,它使用Entitiy Framework 6将文本文件解析为某种数据库结构。

通常,文件内容被解析为3个表:

Table1 --(1-n)-- Table2 --(1-n)-- Table3  

该应用程序在Dev,Stage和Production环境中工作了数月而没有任何问题。

上周它停在舞台上,现在我正试图找出原因。

一个文件包含~100个条目Table1,~2000条目表2,~2000条目表3

每个文件后都会调用

.SaveChanges()

我收到以下超时异常:

  

超时已过期。操作完成之前经过的超时时间或服务器没有响应。声明已经终止。

AutoDetectChangesEnabled设置为false。

因为有第4个表我在每个文件之后都执行了一个更新语句,所以整个事务都有事务,所以我删除了第4个表和事务的东西,但问题仍然存在。

为了测试它是否只是一个性能问题,我设置了Database.CommandTimeout = 120没有任何影响,它仍然在2分钟后运行到超时。

(在问题发生之前,一个文件存储在大约5秒钟内,这绝对没问题)

如果我使用SQL Server Profiler查看SQL Server,我可以在调用.SaveChanges()后看到以下内容:

SQL Server Profiler 仅显示INSERT的前几个Table3语句(始终是前4-15条语句,所有语句都在.SaveChanges()之后不久)

之后:在超时发生之前没有新条目。

我完全不知道要检查什么,因为在代码中没有错误或类似的东西。

如果我查看SQL Server,绝对没有理由延迟查询或类似的事情(CPU,内存和磁盘空间都可以)。

如果您想了解更多信息,请高兴我们就此发表评论。

最好的问候

1 个答案:

答案 0 :(得分:1)

通过重建Table1中的碎片索引来修复它。

以下文章有助于了解如何处理碎片索引:

https://solutioncenter.apexsql.com/why-when-and-how-to-rebuild-and-reorganize-sql-server-indexes/

(如果某个mod仍然认为这不是有效的答案,任何解释都会很棒)