2017-06-28 29 views
1

Entity Framework(EF6)を使用してランダムに実行タイムアウト期限切れのエラーが発生しています。以下の更新コマンドの実行時に、ランダムに実行タイムアウトエラーが発生します。実行のタイムアウトが期限切れになりました - 単純な更新コマンドの場合はランダムに

UPDATE [DBO]。[EmployeeTable] SET [名前] = 0 @、[JoiningDate] = @ は([EMPID] = @ 2)

上記更新コマンドが単純な1 EmployeeTableの更新には2〜5秒かかります。しかし、同じ更新クエリで40〜50秒かかり、エラーの原因となる場合があります。

実行のタイムアウトが切れています。操作が完了するまでにタイムアウト時間が経過したか、サーバーが応答していません。 ステートメントは終了しました

MyApplicationContextクラスのコンストラクタの内部に自分のコードを更新している私のために

this.Database.CommandTimeout = 180次のプロパティを含めるように変更することができます。

上記のコマンドは、タイムアウトの問題を解決するはずです。しかし、私はその問題の根本的な原因を見つけることができません。

このタイプのタイムアウトの問題には、3つの原因があります。どこかでデッドロック

  • データベースの統計情報および/またはクエリプランキャッシュが間違っているがあります

    1. クエリが複雑すぎると、あなたは私を教えてくださいすることができ

  • をチューニングする必要があるものそのエラーの主な原因は?

    +0

    これには解決策がありましたか?私も同様の問題に直面しています。 – Abi

    +0

    いいえ、私はEntity Framework DLLの問題だと思います。 – pradeep

    +0

    .netトランザクションを削除して回避策を得ました。それは完全に機能しました。 – Abi

    答えて

    0

    このクエリ:

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

    は、通常は2秒を服用してはいけません。これはおそらく1行を更新するもので、かなり大きなテーブルであっても2秒間の操作ではありません。 EmployeeTable(EmpId)のインデックスはありますか?もしそうでなければ、それは2秒とデッドロックの可能性を説明するでしょう。

    インデックスをお持ちの場合、これはおそらく別のことです。見るべき場所の1つは、テーブル上のトリガーです。

    +0

    ありがとう@Gordon、私はEmployeeTableのインデックスを持っています。しかし、私はそのテーブルにトリガを持っていません。 1つの問題は、DEVまたはQAデータベースにない本番データベースでのみ発生します。 – pradeep

    関連する問題