Articles

Compileren van de Opgeslagen Procedure

  • 10/28/2019
  • 4 minuten te lezen
    • s
    • M
    • m
    • d
    • m
    • +2

van toepassing op: SQL Server (alle ondersteunde versies) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics parallel data warehouse

dit onderwerp beschrijft hoe een opgeslagen procedure in SQL Server opnieuw gecompileerd kan worden met behulp van Transact-SQL. Er zijn drie manieren om dit te doen: met RECOMPILE optie in de procedure definitie of wanneer de procedure wordt aangeroepen, de recompile query hint op individuele statements, of met behulp van de sp_recompile systeem opgeslagen procedure. Dit onderwerp beschrijft het gebruik van de optie met opnieuw compileren bij het maken van een procedure definitie en het uitvoeren van een bestaande procedure. Het beschrijft ook het gebruik van de sp_recompile systeem opgeslagen procedure om een bestaande procedure opnieuw te compileren.

in dit onderwerp

  • voordat u begint:

    aanbevelingen

    beveiliging

  • :

    Transact-SQL

voordat u begint met

aanbevelingen

  • wanneer een procedure voor de eerste keer wordt gecompileerd of opnieuw gecompileerd, wordt het query-plan van de procedure geoptimaliseerd voor de huidige toestand van de database en zijn objecten. Als een database significante wijzigingen ondergaat in de gegevens of structuur, wordt het queryplan van de procedure voor deze wijzigingen bijgewerkt en geoptimaliseerd door een procedure opnieuw te compileren. Dit kan de verwerkingsprestaties van de procedure verbeteren.

  • Er zijn momenten waarop het opnieuw compileren van de procedure moet worden geforceerd en andere momenten waarop het automatisch gebeurt. Automatisch opnieuw compileren vindt plaats wanneer SQL Server opnieuw wordt gestart. Het komt ook voor als een onderliggende tabel waarnaar wordt verwezen door de procedure fysieke ontwerpwijzigingen heeft ondergaan.

  • een andere reden om een procedure te compileren is om het “parameter snuiven” gedrag van procedure compilatie tegen te gaan. Wanneer SQL Server procedures uitvoert, worden alle parameterwaarden die door de procedure worden gebruikt wanneer deze wordt gecompileerd, opgenomen als onderdeel van het genereren van het queryplan. Als deze waarden de typische waarden vertegenwoordigen waarmee de procedure vervolgens wordt aangeroepen, dan profiteert de procedure van het query-plan elke keer dat het compileert en uitvoert. Als parameterwaarden op de procedure vaak atypisch zijn, kan het forceren van een hercompile van de procedure en een nieuw plan op basis van verschillende parameterwaarden de prestaties verbeteren.

  • SQL Server bevat hercompilatie van procedures op statementniveau. Wanneer SQL Server opgeslagen procedures opnieuw compileert, wordt alleen het statement gecompileerd dat de hercompilatie heeft veroorzaakt, in plaats van de volledige procedure.

  • als bepaalde query ’s in een procedure regelmatig atypische of tijdelijke waarden gebruiken, kunnen de prestaties van de procedure worden verbeterd door de recompile query hint in die query’ s te gebruiken. Aangezien alleen de query ‘ s die de query hint gebruiken opnieuw worden gecompileerd in plaats van de volledige procedure, wordt het hercompilatiegedrag op statementniveau van SQL Server nagebootst. Maar naast het gebruik van de huidige parameterwaarden van de procedure, gebruikt de recompile query hint ook de waarden van alle lokale variabelen in de opgeslagen procedure wanneer u het statement compileert. Zie Query Hint (Transact-SQL) voor meer informatie.

beveiliging

Machtigingen

met de optie opnieuw compileren
als deze optie wordt gebruikt wanneer de proceduredefinitie wordt gemaakt, vereist dit het maken van PROCEDURE-rechten in de database en het wijzigen van rechten op het schema waarin de procedure wordt gemaakt.

als deze optie wordt gebruikt in een uitvoer statement, vereist het uitvoerrechten voor de procedure. Machtigingen zijn niet vereist voor de opdracht uitvoeren zelf, maar machtigingen uitvoeren zijn vereist voor de procedure waarnaar wordt verwezen in de opdracht uitvoeren. Zie uitvoeren (Transact-SQL) voor meer informatie.

recompile Query Hint
Deze functie wordt gebruikt wanneer de procedure wordt gemaakt en de hint wordt opgenomen in Transact-SQL statements in de procedure. Daarom vereist het maken PROCEDURE toestemming in de database en wijzigen toestemming op het schema waarin de procedure wordt gemaakt.

sp_recompile systeem opgeslagen Procedure
vereist ALTER permission op de opgegeven procedure.

met behulp van Transact-SQL

  1. verbinding maken met de Database-Engine.

  2. klik op Nieuwe zoekopdracht in de Standaardbalk.

  3. kopieer en plak het volgende voorbeeld in het query-venster en klik op Uitvoeren. Dit voorbeeld creëert de procedure definitie.

    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; 

om een opgeslagen procedure opnieuw te compileren met de optie met opnieuw compileren

selecteer nieuwe Query, kopieer en plak het volgende codevoorbeeld in het query-venster en klik op Uitvoeren. Hiermee wordt de procedure uitgevoerd en wordt het queryplan van de procedure opnieuw gecompileerd.

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

om een opgeslagen procedure opnieuw te compileren met sp_recompile

selecteer nieuwe Query, kopieer en plak het volgende voorbeeld in het query-venster en klik op Uitvoeren. Dit voert de procedure niet uit, maar markeert wel de procedure die opnieuw gecompileerd moet worden, zodat het query-plan de volgende keer dat de procedure wordt uitgevoerd wordt bijgewerkt.

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

zie ook

Een opgeslagen Procedure aanmaken
Een opgeslagen Procedure wijzigen
Een opgeslagen Procedure hernoemen
bekijk de definitie van een opgeslagen Procedure
bekijk de afhankelijkheden van een opgeslagen Procedure
DROP PROCEDURE (Transact-SQL)