执行超时到期 - 随机进行简单更新命令



我使用实体框架(EF6(随机获取执行超时错误。在执行以下更新命令时,它给出了随机执行超时错误。

update [dbo]。[雇用]设置[name] =@0,[joiningdate] =@1 ([empid] =@2(

上面的更新命令很简单,需要2-5秒才能更新可用的eoplable。但是有时相同的更新查询需要40-50秒,并导致错误作为

执行超时到期。超时期在 操作或服务器的完成未响应。这 声明已终止

为此,我更新了 myApplicationContext的构造函数中的代码

this.database.commandtimeout = 180;

上面的命令应解决我的超时问题。但是我找不到这个问题的根本原因。

为了理解这种类型的超时问题,可能有三个原因;

  1. 某处有一个死锁
  2. 数据库的统计信息和/或查询计划缓存不正确
  3. 查询太复杂了,需要调整

您能告诉我该错误的主要根本原因是什么?

此查询:

UPDATE [dbo].[EmployeeTable]
    SET [Name] = @0,
        [JoiningDate] = @1
    WHERE ([EmpId]=@2);

通常不应需要2秒钟。它(大概是(更新了一排,这也不是2秒的操作,即使在很大的桌子上也是如此。您在EmployeeTable(EmpId)上有索引吗?如果没有,那将解释2秒钟以及僵局的潜力。

如果您确实有索引,这也许还有其他事情正在发生。一个可以看的地方是桌子上的任何触发器。

如果它是随机的,则可能在您的应用程序更新行时访问数据库。

我们遇到了同样的问题。在我们的情况下,根本原因是BO报告在生产数据库上运行。这些报告是锁定行并导致我们的应用程序超时(由于这些报告是按需执行的(。

您可能想检查的其他事情:

  • 您的桌子上有复杂的触发器吗?
  • 您表中使用的所有外国键都在外国表中索引吗?

最新更新