0

Entity Framework で生成された SQL クエリに奇妙な問題があります。私は低めのシナリオを持っています:

(すべての時間は SQL プロファイラーからのものであるため、EF コードは含まれていません)

  • サーバーを再起動します
  • 時間を確認するために SQL Proviler を起動します
  • EF 経由でアプリからクエリを実行します - 12 秒かかります
  • SQL プロバイダーから SQL クエリ アナライザーにクエリをコピーします - 340 ミリ秒かかります
  • EF 経由でアプリからクエリを再度実行します - 12 秒かかります
  • SQL クエリ アナライザーからクエリを再度実行します - 320 ミリ秒かかります (この手順を何度も繰り返しても同じ結果が得られます)

また、サーバーの再起動直後に SQL クエリ アナライザーからクエリを実行すると、最初は約 1 秒しかかからず、上記と同じシナリオよりも時間がかかります。

編集:解決策を見つけましたが、これがクエリを高速化している理由がわかりません。それはまだ未解決の問題です...???

LINQ クエリで .AsNoTracking メソッドを使用しました。このステートメントを削除すると、クエリは 32​​0 ミリ秒で実行されます。これは、EFがNoTrackingで使用するロックレベルに関するものでしょうか???

ヒント/アイデアは本当に素晴らしいでしょう。マーカス

4

1 に答える 1

0

それで、私は自分の質問に答えます-何日も検索した後、マイクロソフトのインシデントを開きました。

本当の理由はまだ明確ではありませんが、何らかの形で SQL Server が EF で実行された場合、クエリに対して別の実行プランを選択していました。したがって、解決策は次の 3 つです。

1) 実行計画が明確になるようにテーブルのインデックスを変更します 2) クエリにヒントを追加します (現時点では EF では不可能です) 3) SQL Server でこのクエリの plan_guide を作成します

最初の解決策を使用することにしました。

于 2013-08-01T10:53:58.273 に答える