Поделиться через


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