Entity Framework 4 - хранимая процедура чрезмерно медленная - PullRequest
6 голосов
/ 27 октября 2011

При выполнении из Management Studio хранимая процедура завершается через <0,1 с, но при выполнении через EF это занимает более 2 с. </p>

Ниже представлен вывод профилировщика:

Profiler output

Немного иронично, поскольку причиной создания SP было повышение производительности запроса EF, который занял около 1,2 с.

UPDATE Что бы это ни стоило, результат SP отображается на комплексный тип EF. Я звоню без всякого фокусного покуса:

var menuTags = db.GetMenuTags(2, "en-US");

SQL, сгенерированный EF:

exec [dbo].[GetMenuTags] @CustTypeId=2,@LanguageId='en-US                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           '

Единственное отличие - куча пробелов, добавляемых EF в конец @LanguageId, но они не влияют на производительность. Я пробовал точно такой же SQL в MSSMS, и он работает так же, как и без пробелов.

1 Ответ

5 голосов
/ 27 октября 2011

SP, выполняемые через EF, всегда возвращают все строки, может ли это быть задержкой.

Возможно, публикация вашего SP и исходного сгенерированного EF SQL поможет

Отредактировано, чтобы добавить то, что появляетсябыть решением

Еще одна мысль (из минувших дней) Обнюхивание параметров часто являлось виновником медленного SP, который был запущен разработчиком с плохими параметрами, а затем создал дрянной план выполнения.Добавление опции WITH RECOMPILE для получения нового плана, основанного на приличных параметрах, в основном решило бы эту проблему.Другой обман заключался в назначении переданных параметров в локальные переменные sql (локальные для SP) и использовании в запросе только локальных переменных.

Теперь у вас есть SP с достойным планом выполнения, который вы сможете удалить.«С РЕКОМЕНДУЕМ», и он все еще будет работать.Я бы сказал, что проблемы с прослушиванием параметров встречаются редко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...