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

SQL-fråga som använder Entity Framework körs långsammare, använder dålig frågeplan

Problemet var en inaktuell eller felaktig frågeplan för min fråga.

Jag löste problemet med att ta bort de befintliga frågeplanerna för den här frågan.

Tack till Vladimir Baranov för att du pekade på sommarskog.se/query-plan-mysteries.html. Tack också till tschmit007 och annemartijn.

Jag var tvungen att identifiera frågeplanerna för min fråga i databasen med hjälp av följande fråga:

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

Detta är en lätt modifierad version av frågan från Sommarskogs tidning. Observera att du måste lägga in din egen kod i liknande uttalanden för att hitta din fråga. Den här frågan svarar med attributlistan och planhandtaget för varje frågeplan för min fråga.

Jag försökte ta reda på vilken plan som kom från SSMS och vilken från EF, så jag tog bort dem alla med följande syntax:

dbcc freeproccache([your plan handle here])

Den nya planen som skapades för min EF-fråga fungerade perfekt. Tydligen tog EF-planen inte hänsyn till att jag nyligen hade uppdaterat statistik på databasen. Tyvärr vet jag inte hur man gör en sp_recompile för en EF-fråga.




  1. Hur du väljer din DBeaver

  2. hur man väljer datarad från ett kommaseparerat värdefält

  3. Försvinner främmande nycklar i phpMyAdmin

  4. varför är det inte snabbt att skapa vy från en vänster sammanfogad vy?