【问题标题】:LINQ to Entities timeout on SubmitChanges()SubmitChanges() 上的 LINQ to Entity 超时
【发布时间】:2012-06-29 19:16:47
【问题描述】:

在数据上下文上调用 SubmitChanges() 时,我遇到了以下异常的持续问题:

“超时。在操作完成之前超时时间已过或服务器没有响应。语句已终止。”

这发生在 5-100 个并发用户正在使用的 ASP.NET Web 应用程序上。请注意,增加站点/数据库的超时时间并没有帮助,并且正在运行的查询非常简单和快速。我已经完全取消了超时时间,这会导致网站在发生错误时无限期挂起。

这个问题的其他方面:

  • 它是间歇性的,无法可靠地复制
  • 它只发生在几种不同的方法中,从来没有其他方法
  • 增加或删除超时时间无济于事
  • 重新启动服务器并重新启动 MSSQL 数据库没有帮助

这似乎是一个并发/死锁问题,但我不知道如何调试或修复它。有什么想法吗?

【问题讨论】:

  • 结果如何?

标签: asp.net sql-server database concurrency linq-to-entities


【解决方案1】:

当应用程序执行数据库操作并等待 SubmitChanges 的响应时,请尝试在 Sqlserver 中运行以下查询

**sp_who2**

查看返回输出中的 Blkby 列。 如果您发现某一行具有某个值(这是阻止您的连接的命令的 SPID)。

检查该列中的 ProgramName 以查找更多信息。

如果您发现如所述那样阻塞的 SPID,则运行以下命令以查找在该 SPID 上执行的最后一个查询。 假设 Blkby 的值为 59

**dbcc inputbuffer(59)**

这将使查询阻塞您的应用程序查询。

这是解决问题的一种方法。

有时由于存储过程中的默认值参数导致参数嗅探而发生超时。

在这种情况下,您可以尝试使用该行作为所用程序的第一行

设置 ARITHABORT 开启

更改过程并再次尝试数据库操作。

如果可行,您可以在之后删除此行,然后再次更改程序。

如果它适合你,试试这个。

我在这里发现了一个类似的问题

还可以在此处阅读有关在 Web 应用程序和 SSMS 中运行缓慢的查询的更多信息

Stored procedure slow when called from web, fast from Management Studio

希望对你有帮助。

【讨论】:

  • 谢谢 Dnsh,我会试一试,让你知道它是否有效。由于问题是间歇性的,我需要等待一些超时开始发生,然后我会检查 Blkby
猜你喜欢
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多