2017-06-28 47 views
1

我正在使用實體框架(EF6)隨機獲取執行超時過期錯誤。在執行下面的更新命令時,它給出了隨機執行超時錯誤。執行超時已過期 - 隨機進行簡單更新命令

UPDATE [DBO]。[EmployeeTable中] SET [名稱] = @ 0,[JoiningDate] = @ 1 WHERE ([EMPID] = @ 2)

上述更新命令是簡單並且需要2-5秒才能更新EmployeeTable。但有時同樣的更新查詢需要40-50秒,並導致錯誤爲

執行超時已過期。 完成操作或服務器沒有響應之前超時的時間已過。 聲明已被終止

對於我更新了內部MyApplicationContext類的構造函數代碼可以被改變成包括以下屬性

this.Database.CommandTimeout = 180;

上述命令應該解決我的超時問題。但我找不到這個問題的根源。

對於我的理解,這種類型的超時問題可能有三個原因;

  1. 有一個僵局地方
  2. 數據庫的統計數據和/或查詢計劃緩存是不正確的
  3. 查詢過於複雜,需要調整

能否請你告訴我是什麼那個錯誤的主要根源是什麼?

+0

你有沒有得到任何解決這個..?我也面臨類似的問題。 – Abi

+0

不,我認爲在實體框架DLL的問題。 – pradeep

+0

我通過刪除.net交易得到了解決方法..它的工作完美.. – Abi

回答

0

這個查詢:

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

通常不應需要2秒。這是(大概)更新一行,即使在一個很大的表上,也不是2秒的操作。你有一個EmployeeTable(EmpId)索引?如果沒有,那將解釋2秒以及潛在的死鎖。

如果您確實有索引,這可能是其他事情正在進行。有一個地方要看桌上的任何觸發器。

+0

謝謝@戈登,我在EmployeeTable上有一個索引。但是我沒有那張桌子上的觸發器。有一件事是這個問題只發生在生產數據庫而不是DEV或QA數據庫上。 – pradeep