У меня есть запрос, который я вставляю в хранимую процедуру. Когда я запускаю запрос с локальными переменными, запрос занимает ~ 1 секунду для запуска. Когда я помещаю один и тот же запрос внутри хранимой процедуры и вызываю SP, для запуска требуется около 2 минут.SQL Server Query работает медленно, когда размещен внутри хранимой процедуры
Из предыдущих вопросов в SO Я думаю, что это может быть связано с параметром sniffing. Когда у меня была эта проблема, прежде чем я объявил локальные переменные внутри моего SP, а затем использовал локальные переменные. Это работало в прошлом, но, похоже, не помогает мне в этом случае.
я в настоящее время
CREATE PROCEDURE dbo.ProcedureName
@DIV VARCHAR(4),
@STD VARCHAR(1), -- S or N
@scen varchar(20)
AS
BEGIN
DECLARE
@DIV_copy VARCHAR(4),
@STD_copy VARCHAR(1),
@scen_copy varchar(20);
SELECT
@DIV_copy = @DIV,
@STD_copy = @STD,
@scen_copy = @scen;
Я также попытался добавить WITH RECOMPILE
как так
CREATE PROCEDURE dbo.ProcedureName
@DIV VARCHAR(4),
@STD VARCHAR(1), -- S or N
@scen varchar(20)
WITH RECOMPILE
AS
BEGIN
DECLARE
@DIV_copy VARCHAR(4),
@STD_copy VARCHAR(1),
@scen_copy varchar(20);
SELECT
@DIV_copy = @DIV,
@STD_copy = @STD,
@scen_copy = @scen;
Кроме того, я попытался добавить OPTION(RECOMPILE)
в конце моего SP как так:
SELECT *
FROM #Output
OPTION(RECOMPILE)
END
GO
Я также пробовал использовать:
OPTION(OPTIMIZE FOR UNKNOWN)
Как:
OPTION(QUERYTRACEON 4136)
На этот вариант, у меня нет соответствующих разрешений для отслеживания запросов.
Ни один из 5 исправлений, приведенных выше, не исправляет проблему, поскольку хранимая процедура по-прежнему занимает от 2 минут до 2 минут и 30 секунд для того же запроса, который занимает 1 или 2 секунды вне хранимой процедуры.
Эти исправления все пришли из этой статьи «Different Approaches to Correct SQL Server Parameter Sniffing»
Кто-нибудь были подобные проблемы? Спасибо за ваше время!
SQL Server 2008R2
Звучит как параметр sniffing, и у меня нет другой идеи, что это может быть. Вы можете проверить эту статью, чтобы узнать, предлагают ли она какие-либо дополнительные решения, которые вы еще не пробовали: http://www.sommarskog.se/query-plan-mysteries.html –
'Я попытался добавить параметр OPTION (RECOMPILE) в конец моего SP' - он должен быть помещен после оскорбительного запроса. Но если «с перекомпиляцией» не работает, я сомневаюсь, что это исправление будет. –
У меня были те же симптомы, и создание локальных копий параметров всегда решало это. Единственное различие заключается в том, что я всегда использовал инструкцию SET вместо инструкции SELECT для копирования значений в локальные переменные. –