sp_recompile (Transact-SQL)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance
Provoque la recompilation des procédures stockées, des déclencheurs et des fonctions définies par l’utilisateur la prochaine fois qu’elles sont exécutées. Pour ce faire, supprimez le plan existant du cache de procédures, forçant la création d’un nouveau plan la prochaine fois que la procédure ou le déclencheur est exécuté. Dans une collection SQL Server Profiler, l’événement SP:CacheInsert
est enregistré au lieu de l’événement SP:Recompile
.
Conventions de la syntaxe Transact-SQL
Syntaxe
sp_recompile [ @objname = ] N'object'
[ ; ]
Arguments
[ @objname = ] N’object'
Nom qualifié ou non qualifié d'une procédure stockée, d'un déclencheur, d'une table, d'une vue ou d'une fonction définie par l'utilisateur dans la base de données actuelle. @objname est nvarchar(776), sans valeur par défaut.
Si @objname est le nom d’une procédure stockée, d’un déclencheur ou d’une fonction définie par l’utilisateur, la procédure stockée, le déclencheur ou la fonction seront recompilés la prochaine fois qu’elle est exécutée.
Si @objname est le nom d’une table ou d’une vue, toutes les procédures stockées, déclencheurs ou fonctions définies par l’utilisateur qui référencent la table ou la vue sont recompilées la prochaine fois qu’elles sont exécutées.
Valeurs des codes de retour
0
(réussite) ou un nombre différent de zéro (échec).
Notes
sp_recompile
recherche un objet dans la base de données active uniquement.
Les requêtes utilisées par les procédures stockées ou les déclencheurs et les fonctions définies par l’utilisateur sont optimisées uniquement lorsqu’elles sont compilées. Comme les index ou d’autres modifications qui affectent les statistiques sont apportées à la base de données, les procédures stockées compilées, les déclencheurs et les fonctions définies par l’utilisateur peuvent perdre de l’efficacité. En recompilant les procédures stockées et les déclencheurs qui agissent sur une table, vous pouvez réoptimiser les requêtes.
L’exécution proactive de cette procédure stockée est généralement inutile. SQL Server recompile automatiquement les procédures stockées, les déclencheurs et les fonctions définies par l’utilisateur lorsqu’ils sont avantageux. Il existe différentes raisons pour lesquelles le moteur de base de données peut choisir de recompiler des objets. La recompilation automatique suit généralement les modifications apportées à l’estimation de cardinalité sous-jacente en raison des mises à jour automatiques ou manuelles des statistiques.
La recompilation d’une procédure stockée avec chaque exécution est l’une des méthodes les moins efficaces pour lutter contre les problèmes de plan de requête provoqués par le paramétrage. L’optimisation du plan sensible aux paramètres de fonctionnalité introduite dans SQL Server 2022 (16.x) tente d’atténuer automatiquement ce problème. Dans les versions antérieures, au lieu d’appeler sp_recompile
avec chaque exécution, tenez compte des éléments suivants :
- Ajoutez l’option WITH RECOMPILE à la requête, nécessitant une modification de code.
- Appliquez l’option
WITH RECOMPILE
avec un repère de plan. - Appliquez l’option
WITH RECOMPILE
avec un indicateur de Magasin des requêtes sans apporter de modifications de code. - Pour plus d’informations, consultez Résolution des requêtes avec des problèmes de plan sensibles aux paramètres.
autorisations
Nécessite l'autorisation ALTER pour l'objet spécifié.
Exemples
L’exemple suivant entraîne la recompilation des procédures stockées, des déclencheurs et des fonctions définies par l’utilisateur qui agissent sur la Sales.Customer
table pour qu’elles soient recompilées la prochaine fois qu’elles sont exécutées.
USE AdventureWorks2022;
GO
EXEC sp_recompile N'Sales.Customer';
GO