Articles

In gespeicherte Prozedur neu kompilieren

  • 28.10.2019
  • 4 Minuten zum Lesen
    • s
    • M
    • m
    • d
    • m
    • +2

gilt für: SQL Server (alle unterstützten Versionen) Azure SQL-Datenbank Verwaltete Azure SQL-Instanz Azure Synapse Analytics Paralleles Data Warehouse

In diesem Thema wird beschrieben, wie eine gespeicherte Prozedur in SQL Server mithilfe von Transact-SQL neu kompiliert wird. Es gibt drei Möglichkeiten, dies zu tun: MIT der Option RECOMPILE in der Prozedurdefinition oder beim Aufruf der Prozedur, dem Abfragehinweis RECOMPILE für einzelne Anweisungen oder mithilfe der gespeicherten Systemprozedur sp_recompile. In diesem Thema wird die Verwendung der Option WITH RECOMPILE beim Erstellen einer Prozedurdefinition und Ausführen einer vorhandenen Prozedur beschrieben. Außerdem wird die Verwendung der gespeicherten Systemprozedur sp_recompile zum Neukompilieren einer vorhandenen Prozedur beschrieben.

In diesem Thema

  • Bevor Sie beginnen:

    Empfehlungen

    Sicherheit

  • Um eine gespeicherte Prozedur neu zu kompilieren, verwenden Sie:

    Transact-SQL

Bevor Sie beginnen

Empfehlungen

  • Wenn eine Prozedur zum ersten Mal kompiliert oder neu kompiliert wird, wird der Abfrageplan der Prozedur für den aktuellen Status der Datenbank und ihrer Objekte optimiert. Wenn eine Datenbank erhebliche Änderungen an ihren Daten oder ihrer Struktur erfährt, wird der Abfrageplan der Prozedur für diese Änderungen aktualisiert und optimiert. Dies kann die Verarbeitungsleistung des Verfahrens verbessern.

  • Es gibt Zeiten, in denen die Neukompilierung von Prozeduren erzwungen werden muss und andere Zeiten, in denen sie automatisch erfolgt. Die automatische Neukompilierung erfolgt bei jedem Neustart von SQL Server. Es tritt auch auf, wenn eine zugrunde liegende Tabelle, auf die von der Prozedur verwiesen wird, physische Entwurfsänderungen erfahren hat.

  • Ein weiterer Grund, eine Prozedur zur Neukompilierung zu zwingen, besteht darin, dem „Parameter-Sniffing“ -Verhalten der Prozedurkompilierung entgegenzuwirken. Wenn SQL Server Prozeduren ausführt, werden alle Parameterwerte, die von der Prozedur beim Kompilieren verwendet werden, in die Generierung des Abfrageplans einbezogen. Wenn diese Werte die typischen Werte darstellen, mit denen die Prozedur anschließend aufgerufen wird, profitiert die Prozedur bei jeder Kompilierung und Ausführung vom Abfrageplan. Wenn Parameterwerte für die Prozedur häufig untypisch sind, kann das Erzwingen einer Neukompilierung der Prozedur und eines neuen Plans auf der Grundlage verschiedener Parameterwerte die Leistung verbessern.

  • SQL Server bietet eine Neukompilierung von Prozeduren auf Anweisungsebene. Wenn SQL Server gespeicherte Prozeduren neu kompiliert, wird anstelle der vollständigen Prozedur nur die Anweisung kompiliert, die die Neukompilierung verursacht hat.

  • Wenn bestimmte Abfragen in einer Prozedur regelmäßig atypische oder temporäre Werte verwenden, kann die Prozedurleistung verbessert werden, indem der RECOMPILE Query-Hinweis in diesen Abfragen verwendet wird. Da nur die Abfragen, die den Abfragehinweis verwenden, anstelle der vollständigen Prozedur neu kompiliert werden, wird das Neukompilierungsverhalten von SQL Server auf Anweisungsebene nachgeahmt. Zusätzlich zur Verwendung der aktuellen Parameterwerte der Prozedur verwendet der Abfragehinweis RECOMPILE beim Kompilieren der Anweisung auch die Werte aller lokalen Variablen in der gespeicherten Prozedur. Weitere Informationen finden Sie unter Abfragehinweis (Transact-SQL).

Sicherheit

Berechtigungen

MIT RECOMPILE-Option
Wenn diese Option beim Erstellen der Prozedurdefinition verwendet wird, sind die Berechtigung CREATE PROCEDURE in der Datenbank und die Berechtigung ALTER für das Schema, in dem die Prozedur erstellt wird, erforderlich.

Wenn diese Option in einer EXECUTE-Anweisung verwendet wird, erfordert sie Ausführungsberechtigungen für die Prozedur. Für die EXECUTE-Anweisung selbst sind keine Berechtigungen erforderlich, für die Prozedur, auf die in der EXECUTE-Anweisung verwiesen wird, sind jedoch Ausführungsberechtigungen erforderlich. Weitere Informationen finden Sie unter AUSFÜHREN (Transact-SQL).

Abfragehinweis NEU KOMPILIEREN
Diese Funktion wird verwendet, wenn die Prozedur erstellt wird und der Hinweis in Transact-SQL-Anweisungen in der Prozedur enthalten ist. Daher erfordert es die Berechtigung CREATE PROCEDURE in der Datenbank und die Berechtigung ALTER für das Schema, in dem die Prozedur erstellt wird.

sp_recompile System Stored Procedure
Erfordert ALTER Berechtigung für die angegebene Prozedur.

Verwenden von Transact-SQL

  1. Stellen Sie eine Verbindung zum Datenbankmodul her.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. Kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein und klicken Sie auf Ausführen. In diesem Beispiel wird die Prozedurdefinition erstellt.

    USE AdventureWorks2012; GO IF OBJECT_ID ( 'dbo.uspProductByVendor', 'P' ) IS NOT NULL DROP PROCEDURE dbo.uspProductByVendor; GO CREATE PROCEDURE dbo.uspProductByVendor @Name varchar(30) = '%' WITH RECOMPILE AS SET NOCOUNT ON; SELECT v.Name AS 'Vendor name', p.Name AS 'Product name' FROM Purchasing.Vendor AS v JOIN Purchasing.ProductVendor AS pv ON v.BusinessEntityID = pv.BusinessEntityID JOIN Production.Product AS p ON pv.ProductID = p.ProductID WHERE v.Name LIKE @Name; 

Um eine gespeicherte Prozedur mit der Option WITH RECOMPILE neu zu kompilieren

Wählen Sie Neue Abfrage, kopieren Sie das folgende Codebeispiel, fügen Sie es in das Abfragefenster ein und klicken Sie auf Ausführen. Dadurch wird die Prozedur ausgeführt und der Abfrageplan der Prozedur neu kompiliert.

USE AdventureWorks2012; GO EXECUTE HumanResources.uspProductByVendor WITH RECOMPILE; GO

Um eine gespeicherte Prozedur mit sp_recompile neu zu kompilieren

Wählen Sie Neue Abfrage, kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein und klicken Sie auf Ausführen. Dies führt die Prozedur nicht aus, markiert jedoch die Prozedur, die neu kompiliert werden soll, sodass ihr Abfrageplan bei der nächsten Ausführung der Prozedur aktualisiert wird.

USE AdventureWorks2012; GO EXEC sp_recompile N'dbo.uspProductByVendor'; GO

Siehe auch

Gespeicherte Prozedur erstellen
Gespeicherte Prozedur ändern
Gespeicherte Prozedur umbenennen
Definition einer gespeicherten Prozedur anzeigen
Abhängigkeiten einer gespeicherten Prozedur anzeigen
DROP-PROZEDUR (Transact-SQL)