在数据上下文中调用 SubmitChanges() 时,我一直遇到以下异常问题:
“超时已过。操作完成前超时时间已过或服务器未响应。语句已终止。”
这发生在 5-100 个并发用户使用的 ASP.NET Web 应用程序上。请注意,增加站点/数据库的超时时间并没有帮助,并且正在运行的查询非常简单和快速。我什至完全删除了导致网站在发生错误时无限期挂起的超时期限。
这个问题的其他方面:
- 它是间歇性的,无法可靠地重现
- 它只会出现在几种不同的方法中,不会出现在任何其他方法中
- 增加或删除超时期限没有帮助
- 重新启动服务器并重新启动 MSSQL 数据库没有帮助
这似乎是一个并发/死锁问题,但我不知道如何调试或修复它。有什么想法吗?
最佳答案
当应用程序执行数据库操作并等待 SubmitChanges 的响应时,尝试在 Sqlserver 中运行以下查询
**sp_who2**
查看返回输出中的 Blkby 列。 如果您发现某一行具有某个值(这是阻止您的连接的命令的 SPID)。
检查该列中的 ProgramName 以查找更多信息。
如果您找到所描述的阻塞的 SPID,则运行以下命令以查找对该 SPID 执行的最后一个查询。 假设 Blkby 的值为 59
**dbcc inputbuffer(59)**
这将使查询阻止您的应用程序查询。
这是一种解决问题的方法。
有时由于存储过程中的默认值参数导致参数嗅探而发生超时。
在那种情况下,您可以尝试将该行用作所用程序的第一行
开启阿里莎波特
改变流程,再次尝试数据库操作。
如果可行,您可以在之后删除此行,然后再次更改程序。
如果它适合你,试试这个。
我在这里发现了一个类似的问题
另请阅读有关查询在 Web 应用程序中运行缓慢并在此处立即在 SSMS 中运行缓慢的更多信息
Stored procedure slow when called from web, fast from Management Studio
希望对您有所帮助。
关于asp.net - SubmitChanges() 上的 LINQ to Entities 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11267686/