sp_recompile (Transact-SQL)
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Bewirkt, dass gespeicherte Prozeduren, Trigger und benutzerdefinierte Funktionen bei der nächsten Ausführung neu kompiliert werden. Dazu wird der vorhandene Plan aus dem Prozedurcache gelöscht und erzwingt, dass bei der nächsten Ausführung der Prozedur oder des Triggers ein neuer Plan erstellt 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 Standardwert.
Wenn @objname der Name einer gespeicherten Prozedur, eines Triggers oder einer benutzerdefinierten Funktion ist, wird die gespeicherte Prozedur, der Trigger oder die Funktion bei der nächsten Ausführung neu kompiliert.
Wenn @objname der Name einer Tabelle oder Sicht ist, werden alle gespeicherten Prozeduren, Trigger oder benutzerdefinierten Funktionen, die auf die Tabelle oder Sicht verweisen, bei der nächsten Ausführung neu kompiliert.
Rückgabecodewerte
0 (Erfolg) oder eine Zahl ungleich Null (Fehler)
Bemerkungen
sp_recompile
sucht nur in der aktuellen Datenbank nach einem Objekt.
Die abfragen, die von gespeicherten Prozeduren oder Triggern und benutzerdefinierten Funktionen verwendet werden, werden nur optimiert, wenn sie kompiliert werden. Wenn Sie Indizes bearbeiten oder andere Änderungen an der Datenbank vornehmen, die sich auf Statistiken beziehen, kann dies die Effizienz von gespeicherten Prozeduren, Triggern und benutzerdefinierten Funktionen beeinträchtigen. 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 neu, wenn dies vorteilhaft ist. Es gibt verschiedene Gründe, warum die Datenbank-Engine Objekte neu kompilieren möchte. In der Regel folgt die automatische Neukompilierung änderungen an der zugrunde liegenden Kardinalitätsschätzung aufgrund automatischer oder manueller Statistikupdates.
Das Erneute Kompilieren einer gespeicherten Prozedur mit jeder Ausführung ist eine der weniger effizienten Möglichkeiten, Abfrageplanprobleme zu bekämpfen, die durch die Parametrisierung verursacht werden. Die feature Parameter Sensitive Plan-Optimierung, die in SQL Server 2022 (16.x) eingeführt wurde, versucht, dieses Problem automatisch zu beheben. In früheren Versionen sollten Sie nicht mit jeder Ausführung aufrufen sp_recompile
, sondern Folgendes in Betracht ziehen:
- Fügen Sie die WITH RECOMPILE-Option an die Abfrage an, sodass eine Codeänderung erforderlich ist.
- Wenden Sie die
WITH RECOMPILE
Option mit einer Plananleitung 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 parameterabhängigen Planproblemen.
Berechtigungen
Erfordert die ALTER-Berechtigung für das angegebene Objekt.
Beispiele
Im folgenden Beispiel werden gespeicherte Prozeduren, Trigger und benutzerdefinierte Funktionen, die auf die Sales.Customer
Tabelle reagieren, bei der nächsten Ausführung neu kompiliert.
USE AdventureWorks2022;
GO
EXEC sp_recompile N'Sales.Customer';
GO
Siehe auch
- CREATE PROCEDURE (Transact-SQL)
- CREATE TRIGGER (Transact-SQL)
- Gespeicherte Systemprozeduren (Transact-SQL)
- SQL:StmtRecompile (Ereignisklasse)