SSMS
 sql >> база данни >  >> Database Tools >> SSMS

SQL заявката с помощта на Entity Framework работи по-бавно, използва лош план за заявка

Проблемът беше остарял или неправилен план за заявка за моята заявка.

Реших проблема с изтриването на съществуващите планове за заявка за тази заявка.

Благодаря на Владимир Баранов, че ме насочи към 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%'

Това е леко модифицирана версия на заявката от статията на sommarskog. Имайте предвид, че трябва да поставите свой собствен код в подобни изрази, за да намерите вашата заявка. Тази заявка отговаря със списъка с атрибути и манипулатора на плана за всеки план на заявка за моята заявка.

Опитах се да разбера кой план идва от SSMS и кой от EF, така че изтрих всички, използвайки следния синтаксис:

dbcc freeproccache([your plan handle here])

Новият план, създаден за моята EF заявка, работи перфектно. Очевидно планът на EF не взе предвид факта, че наскоро бях актуализирал статистиката на базата данни. За съжаление, не знам как да направя sp_recompile за EF заявка.




  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Как да вмъкна NEWID() / GUID / UUID в редактора на код?

  2. Промяна на CommandTimeout в студио за управление на SQL

  3. SQL Server Management Studio:значение на икона

  4. Накарайте SQL Intellisense да знае текущата база данни

  5. Избран като жертва на безизходица при просто Add() -> SaveChanges()