sp_recompile (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance
Bewirkt, dass gespeicherte Prozeduren, Trigger und benutzerdefinierte Funktionen beim nächsten Ausführen neu kompiliert werden. Dies geschieht durch Ablegen des vorhandenen Plans aus dem Prozedurcache, wodurch erzwungen wird, dass ein neuer Plan erstellt wird, wenn die Prozedur oder der Trigger das nächste Mal ausgeführt wird. In einer SQL Server Profiler-Auflistung wird das Ereignis SP:CacheInsert
anstelle des Ereignisses SP:Recompile
protokolliert.
Transact-SQL-Syntaxkonventionen
Syntax
sp_recompile [ @objname = ] N'object'
[ ; ]
Argumente
[ @objname = ] N'object'
Der qualifizierte oder nicht qualifizierte Name einer gespeicherten Prozedur, eines Triggers, einer Tabelle, einer Sicht oder einer benutzerdefinierten Funktion in der aktuellen Datenbank. @objname ist nvarchar(776), ohne Standard.
Wenn @objname der Name einer gespeicherten Prozedur, eines Triggers oder einer benutzerdefinierten Funktion ist, wird die gespeicherte Prozedur, der Trigger oder die Funktion beim nächsten Ausführen neu kompiliert.
Wenn @objname der Name einer Tabelle oder Ansicht ist, werden alle gespeicherten Prozeduren, Trigger oder benutzerdefinierten Funktionen, die auf die Tabelle oder Ansicht verweisen, beim nächsten Ausführen neu kompiliert.
Rückgabecodewerte
0
(Erfolg) oder eine Nichtzeronummer (Fehler).
Hinweise
sp_recompile
Sucht nur nach einem Objekt in der aktuellen Datenbank.
Die von gespeicherten Prozeduren oder Triggern verwendeten Abfragen und benutzerdefinierte Funktionen werden nur optimiert, wenn sie kompiliert werden. Da Indizes oder andere Änderungen, die sich auf Statistiken auswirken, an der Datenbank vorgenommen werden, können kompilierte gespeicherte Prozeduren, Trigger und benutzerdefinierte Funktionen die Effizienz verlieren. Durch das erneute Kompilieren der gespeicherten Prozeduren und Trigger, die auf eine Tabelle zugreifen, können solche Abfragen wieder optimiert werden.
Die proaktive Ausführung dieser gespeicherten Prozedur ist in der Regel nicht erforderlich. SQL Server kompiliert gespeicherte Prozeduren, Trigger und benutzerdefinierte Funktionen automatisch bei Vorteil. Es gibt verschiedene Gründe, warum das Datenbankmodul objekte neu kompilieren möchte. Am häufigsten folgt die automatische Neukompilierung änderungen an der zugrunde liegenden Kardinalitätsschätzung aufgrund von automatischen oder manuellen Statistikenaktualisierungen.
Das Erneute Kompilieren einer gespeicherten Prozedur mit jeder Ausführung ist eine der weniger effizienten Methoden zur Bekämpfung von Abfrageplanproblemen, die durch die Parametrisierung verursacht werden. Die in SQL Server 2022 (16.x) eingeführte Optimierung des Featureparameters vertraulicher Plan versucht, dieses Problem automatisch zu beheben. Berücksichtigen Sie in früheren Versionen anstelle von Aufrufen sp_recompile
mit jeder Ausführung Folgendes:
- Fügen Sie die WITH RECOMPILE-Option an die Abfrage an, wobei eine Codeänderung erforderlich ist.
- Wenden Sie die
WITH RECOMPILE
Option mit einem Planleitfaden an. - Wenden Sie die
WITH RECOMPILE
Option mit einem Abfragespeicher Hinweis an, ohne Codeänderungen vorzunehmen. - Weitere Informationen finden Sie unter Beheben von Abfragen mit parametersensitiven Planproblemen.
Berechtigungen
Erfordert die ALTER-Berechtigung für das angegebene Objekt.
Beispiele
Im folgenden Beispiel werden gespeicherte Prozeduren, Trigger und benutzerdefinierte Funktionen verursacht, die auf die Sales.Customer
Tabelle reagieren, wenn sie das nächste Mal neu kompiliert werden, wenn sie das nächste Mal ausgeführt werden.
USE AdventureWorks2022;
GO
EXEC sp_recompile N'Sales.Customer';
GO