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

SQL-forespørgsel, der bruger Entity Framework, kører langsommere, bruger dårlig forespørgselsplan

Problemet var en forældet eller forkert forespørgselsplan for min forespørgsel.

Jeg løste problemet med at slette de eksisterende forespørgselsplaner for denne forespørgsel.

Tak til Vladimir Baranov for at henvise mig til sommarskog.se/query-plan-mysteries.html. Også tak til tschmit007 og annemartijn.

Jeg var nødt til at identificere forespørgselsplanerne for min forespørgsel i databasen ved hjælp af følgende forespørgsel:

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

Dette er en let modificeret version af forespørgslen fra Sommarskogs papir. Bemærk, at du skal indsætte din egen kode i like-sætningerne for at finde din forespørgsel. Denne forespørgsel svarer med attributlisten og planhåndtaget for hver forespørgselsplan for min forespørgsel.

Jeg forsøgte at finde ud af, hvilken plan der kom fra SSMS og hvilken fra EF, så jeg slettede dem alle ved hjælp af følgende syntaks:

dbcc freeproccache([your plan handle here])

Den nye plan oprettet til min EF-forespørgsel fungerede perfekt. Tilsyneladende tog EF-planen ikke højde for, at jeg for nylig havde opdateret statistik på databasen. Desværre ved jeg ikke, hvordan man laver en sp_recompile for en EF-forespørgsel.




  1. Kan ikke få adgang til MySQL via XAMPP og phpMyAdmin

  2. phpmyadmin fejl under installationen Tom værdi for 'port' angivet.

  3. Fejl ved maksimal udførelsestid

  4. Sådan redigeres data i resultatgitter i SQL Server Management Studio