sql >> Databáze >  >> Database Tools >> SSMS

Dotaz SQL pomocí Entity Framework běží pomaleji, používá špatný plán dotazů

Problém byl zastaralý nebo nesprávný plán dotazů pro můj dotaz.

Vyřešil jsem problém s odstraněním existujících plánů dotazů pro tento dotaz.

Děkuji Vladimíru Baranovovi, že mě nasměroval na sommarskog.se/query-plan-mysteries.html. Díky také tschmit007 a annemartijn.

Musel jsem identifikovat plány dotazů pro můj dotaz v databázi pomocí následujícího dotazu:

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

Toto je mírně upravená verze dotazu ze sommarskogova papíru. Všimněte si, že musíte do podobných příkazů vložit svůj vlastní kód, abyste našli svůj dotaz. Tento dotaz odpoví seznamem atributů a popisovačem plánu pro každý plán dotazu pro můj dotaz.

Snažil jsem se zjistit, který plán pochází z SSMS a který z EF, a tak jsem je všechny smazal pomocí následující syntaxe:

dbcc freeproccache([your plan handle here])

Nový plán vytvořený pro můj dotaz EF fungoval perfektně. Plán EF zjevně nebral v úvahu, že jsem nedávno aktualizoval statistiky v databázi. Bohužel nevím, jak provést sp_recompile pro dotaz EF.




  1. MySQL nezobrazuje databáze vytvořené v phpMyAdmin

  2. httpclient (phpmyadmin) nefunguje na Androidu 4.0+

  3. phpMyAdmin - Chyba:relační funkce jsou zakázány

  4. Chyba syntaxe MySQL DBCC CHECKIDENT