Compartilhar via


sp_recompile (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Faz com que procedimentos armazenados, gatilhos e funções definidas pelo usuário sejam recompilados na próxima vez que forem executados. Ele faz isso descartando o plano existente do cache de procedimentos, forçando a criação de um novo plano na próxima vez que o procedimento ou gatilho for executado. Em uma coleção do SQL Server Profiler, o evento SP:CacheInsert é registrado em vez do evento SP:Recompile.

Convenções de sintaxe de Transact-SQL

Sintaxe

sp_recompile [ @objname = ] N'object'
[ ; ]

Argumentos

@objname [ = ] N'objeto'

O nome qualificado ou não qualificado de um procedimento armazenado, gatilho, tabela, exibição ou função definida pelo usuário no banco de dados atual. @objname é nvarchar(776), sem padrão.

  • Se @objname for o nome de um procedimento armazenado, gatilho ou função definida pelo usuário, o procedimento armazenado, o gatilho ou a função será recompilado na próxima vez que for executado.

  • Se @objname for o nome de uma tabela ou exibição, todos os procedimentos armazenados, gatilhos ou funções definidas pelo usuário que fazem referência à tabela ou exibição serão recompilados na próxima vez que forem executados.

Valores do código de retorno

0 (êxito) ou um número diferente de zero (falha)

Comentários

sp_recompile procura um objeto apenas no banco de dados atual.

As consultas usadas por procedimentos armazenados, gatilhos e funções definidas pelo usuário são otimizadas somente quando são compiladas. À medida que índices ou outras alterações que afetam as estatísticas são feitas no banco de dados, procedimentos armazenados compilados, gatilhos e funções definidas pelo usuário podem perder eficiência. Recompilando procedimentos armazenados e gatilhos que agem em uma tabela, você pode reotimizar as consultas.

A execução proativa desse procedimento armazenado geralmente é desnecessária. O SQL Server recompila automaticamente procedimentos armazenados, gatilhos e funções definidas pelo usuário quando vantajoso. Há vários motivos pelos quais o mecanismo de banco de dados pode optar por recompilar objetos. Mais comumente, a recompilação automática segue as alterações na estimativa de cardinalidade subjacente devido a atualizações de estatísticas automáticas ou manuais.

Recompilar um procedimento armazenado com cada execução é uma das maneiras menos eficientes de combater problemas de plano de consulta causados pela parametrização. O recurso Otimização do Plano Sensível a Parâmetros introduzido no SQL Server 2022 (16.x) tenta atenuar esse problema automaticamente. Nas versões anteriores, em vez de chamar sp_recompile com cada execução, considere:

Permissões

Exige permissão ALTER no objeto especificado.

Exemplos

O exemplo a seguir faz com que procedimentos armazenados, gatilhos e funções definidas pelo usuário que atuam na Sales.Customer tabela sejam recompilados na próxima vez que forem executados.

USE AdventureWorks2022;
GO
EXEC sp_recompile N'Sales.Customer';
GO