Страницы

Поиск по вопросам

вторник, 21 мая 2019 г.

WITH RECOMPILE в процедурах MS SQL

На сколько я знаю, то при создании процедуры к ней крепится на мертво план-выполнения, до тех пор пока сервер не перезагрузится, либо процедура пересоздастся, либо не будет запущена с опцией WITH RECOMPILE, что может повлечь за собой просадку производительности из-за устаревшего плана.
Предположим, процедура вызывает вложенные процедуры.
Если процедура, которая вызывается с WITH RECOMPILE вызывает внутри себя процедуры без WITH RECOMPILE, то будет ли рассчитан оптимальный план вызова внутренних процедур? И наоборот: Что будет если внешняя процедура не имеет WITH RECOMPILE, а внутренние имеют.


Ответ

План будет пересчитан только для родительской хранимой процедуры. Тут обратная история, планы будут пересчитаны только для для дочерних.
Для проверки можете использовать:
select o.name, s.* from master..syscacheobjects s inner join sysobjects o on s.objid = o.id where s.dbid = DB_ID() order by o.name

Комментариев нет:

Отправить комментарий