Почему вызов хранимой процедуры медленнее, чем запуск кода внутри хранимой процедуры? - PullRequest
1 голос
/ 03 декабря 2010

У меня есть хранимая процедура, выполнение которой занимает более минуты.Если я беру код в хранимой процедуре и просто запускаю его напрямую, это занимает около 20 секунд.Я не могу придумать ничего такого, что могло бы вызвать это ...

Если я посмотрю на планы выполнения, они отличаются, но получение плана выполнения для самого запроса увеличивает время нахождения на одном уровне с сохраненнымвызов процедуры.

Я пытался создать новый sproc с этим запросом, но он был таким же медленным, как и старый ...

Ответы [ 3 ]

3 голосов
/ 03 декабря 2010

Я полностью краду это у Гранта Фричи, но, по крайней мере, я отдаю ему должное:

Обнюхивание параметров обычно является причиной чего-то вроде этого. Когда вы выполняете запрос как простой запрос, все параметры являются локальными, поэтому SQL Server может просматривать их, анализировать их и определять план выполнения на основе значений. Как только вы помещаете параметры в хранимую процедуру, SQL Server правильно принимает неизвестное значение в параметре и создает другой план выполнения. В большинстве случаев это работает хорошо. В некоторых случаях это не так.

1 голос
/ 03 декабря 2010

Звучит так, будто у вас включен «Включить фактический план выполнения» при запуске хранимой процедуры.Если это так, попробуйте с отключенной опцией.

0 голосов
/ 03 декабря 2010

Возможно ли, что данные сильно изменились / выросли с момента создания хранимой процедуры?Напомним, что одной из точек хранимой процедуры является кэширование плана выполнения, чтобы при следующем запуске этого не требовалось.Если данные резко изменились с течением времени, sproc может не работать так же.

Чтобы заставить SQL создать новый план выполнения для sproc и узнать больше, зайдите here

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