Freigeben über


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:Recompileprotokolliert.

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 Zahl ungleich null (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:

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