मेरी क्वेरी के लिए समस्या एक पुरानी या गलत क्वेरी योजना थी।
मैंने इस क्वेरी के लिए मौजूदा क्वेरी योजनाओं को हटाने की समस्या का समाधान किया है।
sommarskog.se/query-plan-mysteries.html पर मुझे इंगित करने के लिए व्लादिमीर बरानोव का धन्यवाद। 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%'
यह सोमरस्कोग के पेपर से क्वेरी का हल्का संशोधित संस्करण है। ध्यान दें कि आपको अपनी क्वेरी खोजने के लिए समान कथनों में अपना कोड डालना होगा। यह क्वेरी मेरी क्वेरी के लिए प्रत्येक क्वेरी योजना के लिए विशेषता सूची और योजना हैंडल के साथ प्रतिक्रिया करती है।
मैंने यह पता लगाने की कोशिश की कि कौन सी योजना SSMS से आई और कौन सी EF से, इसलिए मैंने निम्नलिखित सिंटैक्स का उपयोग करके उन सभी को हटा दिया:
dbcc freeproccache([your plan handle here])
मेरी ईएफ क्वेरी के लिए बनाई गई नई योजना ने पूरी तरह से काम किया। जाहिर है, ईएफ योजना ने इस बात पर ध्यान नहीं दिया कि मैंने हाल ही में डेटाबेस पर आंकड़े अपडेट किए थे। दुर्भाग्य से, मुझे नहीं पता कि EF क्वेरी के लिए sp_recompile कैसे करें।