sp_recompile (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Приводит к повторной компиляции хранимых процедур, триггеров и определяемых пользователем функций при следующем запуске. Это делается путем удаления существующего плана из кэша процедур, принудив создать новый план при следующем запуске процедуры или триггера. В коллекции SQL Server Profiler событие SP:CacheInsert
регистрируется вместо события SP:Recompile
.
Соглашения о синтаксисе Transact-SQL
Синтаксис
sp_recompile [ @objname = ] N'object'
[ ; ]
Аргументы
[ @objname = ] N'object'
Уточненное или не уточненное имя хранимой процедуры, триггера, таблица, представления или определяемой пользователем функции в текущей базе данных. @objname — nvarchar(776) без значения по умолчанию.
Если @objname имя хранимой процедуры, триггера или определяемой пользователем функции, хранимая процедура, триггер или функция будет перекомпилирована при следующем запуске.
Если @objname имя таблицы или представления, все хранимые процедуры, триггеры или определяемые пользователем функции, ссылающиеся на таблицу или представление, будут перекомпилированы при следующем выполнении.
Значения кода возврата
0 (успешное завершение) или ненулевое значение (неуспешное завершение)
Замечания
sp_recompile
ищет объект только в текущей базе данных.
Запросы, используемые хранимыми процедурами или триггерами, и определяемые пользователем функции оптимизированы только при компиляции. Как только индексы или другие изменения, которые влияют на статистику, внесены в базу данных, компилированные хранимые процедуры, триггеры и определяемые пользователем функции могут утратить эффективность. Путем перекомпиляции хранимых процедур и триггеров, влияющих на таблицу, можно повторно оптимизировать запросы.
Упреждающее выполнение этой хранимой процедуры обычно не требуется. SQL Server автоматически перекомпилирует хранимые процедуры, триггеры и определяемые пользователем функции, если это выгодно. Существует различные причины, по которым ядро СУБД может перекомпилировать объекты. Чаще всего автоматическая перекомпиляция следует изменениям базовой оценки кратности из-за автоматического или ручного обновления статистики.
Перекомпиляция хранимой процедуры с каждым выполнением является одним из менее эффективных способов борьбы с проблемами плана запросов, вызванными параметризацией. Оптимизация с учетом параметров, представленная в SQL Server 2022 (16.x), пытается устранить эту проблему автоматически. В предыдущих версиях вместо вызова sp_recompile
каждого выполнения рассмотрите:
- Добавьте параметр WITH RECOMPILE в запрос, требуя изменения кода.
WITH RECOMPILE
Примените параметр с помощью руководства по плану.WITH RECOMPILE
Примените параметр с указанием хранилище запросов без внесения изменений в код.- Дополнительные сведения см. в разделе "Устранение запросов с проблемами с конфиденциальными параметрами".
Разрешения
Необходимо разрешение ALTER для объекта.
Примеры
В следующем примере хранимые процедуры, триггеры и определяемые пользователем функции, действующие в Sales.Customer
таблице, будут перекомпилированы при следующем запуске.
USE AdventureWorks2022;
GO
EXEC sp_recompile N'Sales.Customer';
GO