sql >> Database >  >> Database Tools >> SSMS

SQL-query met Entity Framework werkt langzamer, gebruikt slecht queryplan

Het probleem was een oud of onjuist queryplan voor mijn query.

Ik heb het probleem opgelost voor het verwijderen van de bestaande queryplannen voor deze query.

Met dank aan Vladimir Baranov voor het wijzen op sommarskog.se/query-plan-mysteries.html. Dank ook aan tschmit007 en annemartijn.

Ik moest de queryplannen voor mijn query in de database identificeren met behulp van de volgende query:

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%'

Dit is een licht gewijzigde versie van de vraag uit het artikel van sommarskog. Houd er rekening mee dat u uw eigen code in de like-instructies moet plaatsen om uw zoekopdracht te vinden. Deze query reageert met de attributenlijst en de planhandle voor elk queryplan voor mijn query.

Ik probeerde erachter te komen welk plan van SSMS kwam en welk van EF, dus ik heb ze allemaal verwijderd met behulp van de volgende syntaxis:

dbcc freeproccache([your plan handle here])

Het nieuwe plan gemaakt voor mijn EF-query werkte perfect. Blijkbaar hield het EF-plan er geen rekening mee dat ik recentelijk de statistieken over de database had bijgewerkt. Helaas weet ik niet hoe ik een sp_recompile moet doen voor een EF-query.




  1. mySQL phpmyadmin - standaard kleine letters

  2. Fout in phpMyAdmin na update naar v4.8.0:$cfg['TempDir'] (./tmp/) is niet toegankelijk

  3. Schema van resultatenset bekijken in SQL Server Management Studio

  4. Door de gebruiker gedefinieerde MySQL-functie voor Latitude Longitude-syntaxis