实体框架只是在插入期间因超时而停止



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

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

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

该应用程序运行了几个月,在开发、阶段和生产环境中没有任何问题。

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

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

.SaveChanges()在每个文件之后调用。

我收到以下超时异常:

超时已过期。操作完成之前经过的超时期限或服务器没有响应。该语句已终止。

AutoDetectChangesEnabled设置为 false。

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

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

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

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

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

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

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

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

很高兴对此发表每条评论,如果您想了解更多信息,请告诉我。

此致敬意

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新