問題は、私のクエリの古いクエリプランまたは正しくないクエリプランでした。
このクエリの既存のクエリプランを削除する際の問題を解決しました。
sommarskog.se/query-plan-mysteries.htmlを教えてくれたVladimirBaranovに感謝します。 tschmit007とannemartijnにも感謝します。
次のクエリを使用して、データベース内のクエリのクエリプランを特定する必要がありました。
SELECT qs.plan_handle, a.attrlist, est.dbid, text
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) est
CROSS APPLY (SELECT epa.attribute + '=' + convert(nvarchar(127), epa.value) + ' '
FROM sys.dm_exec_plan_attributes(qs.plan_handle) epa
WHERE epa.is_cache_key = 1
ORDER BY epa.attribute
FOR XML PATH('')) AS a(attrlist)
WHERE est.text LIKE '%standardHourRate%' and est.text like '%q__7%'and est.text like '%Unit Overhead%'
AND est.text NOT LIKE '%sys.dm_exec_plan_attributes%'
これは、sommarskogの論文からのクエリのわずかに変更されたバージョンです。クエリを見つけるには、likeステートメントに独自のコードを挿入する必要があることに注意してください。このクエリは、クエリの各クエリプランの属性リストとプランハンドルで応答します。
どのプランがSSMSからのもので、どのプランがEFからのものかを調べようとしたので、次の構文を使用してすべてを削除しました。
dbcc freeproccache([your plan handle here])
私のEFクエリ用に作成された新しいプランは完全に機能しました。どうやら、EF計画は、私が最近データベースの統計を更新したことを考慮していませんでした。残念ながら、EFクエリに対してsp_recompileを実行する方法がわかりません。