Linq To Entities(L2E)を使用して、データベースに格納されたすべてのストアドプロシージャをオブジェクトに簡単に変換できるようにします。私のデータは本当に敏感ではありません(私は分離レベル "どこでも読んでいない"と思っています)。私は数百万行のテーブルをいくつか持っています。私は、Webサイトと、エンティティフレームワークを使用して作成された同じデータモデルを使用するスクリプトの束を持っています。私が使用するすべてのフィルタがインデックスによって直接キャッチされるように、すべてのテーブル(各テーブルに対して最大3)にインデックスを付けました。私のスクリプトは、主に私がREAD_COMMITTED_SNAPSHOTおよびALLOW_SNAPSHOT_ISOLATIONをONに設定されているデータベースLinq Toエンティティとストアドプロシージャのデータベースロック(またはスロー)
に結果を追加
1)5秒〜DB(からご入手) 2)API(1-3秒を作る) 3)で構成されてい。
この戦略を使用すると、ほとんどのクエリは固定され、非常に高速です(通常は)。私はまだ20秒まで実行できるスクリプトで使用されているクエリをいくつか持っていますが、それは頻繁に呼び出されません。
突然、データベース全体が遅くなり、すべてのクエリがゆっくり返される(10秒以上かかる可能性があります)。 SQLプロファイラを使用して、問題を見つけることを試みました。
「READ UNCOMMITED」を使用してNOLOCKを検討しています。今は、可能な各データベース呼び出しと、索引および/またはキャッシュ表を追加して、呼び出しを高速化しています。
私はまた、L2Eを削除し、 "古い方法"にアクセスして、問題ではないことを確認しました。私のデータコンテキストは私のテーブルを見ていますか?それは確かにそのように見える。作成されたコンテキストを最小限に抑えるためにAPI呼び出しでコンテキストを存続させることを実験していますが、今はデータベースを探していると思っていたので、それぞれの呼び出しに対して新しいコンテキストを作成します。
問題は私が制御することができないということです。すべての呼び出しが速くなり、それ以外のすべてのシステムはシステム全体が遅くなります。
SQL Serverを再起動してインデックスを再構築すると、すべての処理が遅くなる前に短時間ですばやく再構築されます。任意のポインタが評価されるだろう。
、私は2週間前に必須ではないすべてのものをオフにし、私は今、毎晩、インデックスを再問題は解消されました。私はスクリプトを1つずつ再度アクティブにしようとして、問題が戻ってくるかどうかを確認し、あなたのヒントを確認します。ありがとう。 – Fischer