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