Как я могу контролировать сниффинг параметров и / или подсказки запросов в платформе сущностей?

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

У меня есть проблема, когда один из моих запросов Entity Framework (EF) занимает очень много времени для выполнения в Sql Server, хотя когда я копирую и вставляю сгенерированный TSQL в Sql Server Management Studio (SSMS), он выполняется очень быстро. После некоторого расследования я обнаружил, что у меня возникла проблема с перехватом параметров, и правильный способ ее устранения - вставить один из множества подсказок запроса (OPTIMIZE FOR, RECOMPILE и т. Д.). Как мне вставить эти подсказки в мои EF-запросы?

Связанные с этим вопросы с разных точек зрения находятся здесь, здесь и здесь.

2 ответа

Решение

Чтобы применить подсказку к запросу, сгенерированному EF, вы должны использовать руководства плана, более подробную информацию здесь: соединение один к одному Недостаточно быстро в SQL Server

Если вы выполняете хранимые процедуры, вы можете объявить параметры хранимой процедуры внутренне.

Т.е.

CREATE PROCEDURE sp_test
(
     @param1     NVARCHAR(10),
     @param2     INT
)

AS

DECLARE @internalParam1 NVARCHAR(10)
DECLARE @internalParam2 INT

SET @internalParam1 = @param1
SET @internalParam2 = @param2

-- REST OF YOUR QUERY

GO

Это остановит SQL Server кеширование любых параметров, которые передаются в SP.

Другие вопросы по тегам