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:
- Acrescente a opção WITH RECOMPILE à consulta, exigindo uma alteração de código.
- Aplique a
WITH RECOMPILE
opção com um guia de plano. - Aplique a
WITH RECOMPILE
opção com uma dica do Repositório de Consultas sem fazer alterações de código. - Para obter mais informações, consulte Resolvendo consultas com problemas de plano sensíveis a parâmetros.
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