我使用实体框架(EF6)随机获得执行超时过期错误。在执行以下更新命令时,它会给出随机执行超时错误。
UPDATE [dbo]。[EmployeeTable] SET [Name] = @ 0,[JoiningDate] = @ 1 WHERE ([EMPID] = @ 2)
上述更新命令很简单,更新EmployeeTable需要2-5秒。但有时相同的更新查询需要40-50秒,并导致错误
执行超时已过期。超时时间过去之前 完成操作或服务器没有响应。该 声明已被终止
为此,我在 MyApplicationContext 类的构造函数中更新了我的代码,可以更改为包含以下属性
this.Database.CommandTimeout = 180;
上述命令应解决我的超时问题。但我无法找出问题的根本原因。
根据我的理解,这种类型的超时问题可能有三个原因;
您能否告诉我该错误的主要根源是什么?
答案 0 :(得分:0)
此查询:
UPDATE [dbo].[EmployeeTable]
SET [Name] = @0,
[JoiningDate] = @1
WHERE ([EmpId]=@2);
通常不需要2秒钟。它(可能)正在更新单行,即使在相当大的表上,也不是2秒的操作。你有EmployeeTable(EmpId)
的索引吗?如果没有,这将解释2秒以及死锁的可能性。
如果你有一个索引,这或许正在发生其他事情。一个值得关注的地方是桌面上的任何触发器。
答案 1 :(得分:0)
如果是随机的,则可能是您的应用程序在更新行时正在访问数据库。
我们遇到了同样的问题。在我们的案例中,根本原因是BO报告正在生产数据库上运行。这些报告锁定行并导致我们的应用程序超时(随机出现,因为这些报告是按需执行的。)
您可能要检查的其他事项: