Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Analytics Platform System (PDW)
SQL-database in Microsoft Fabric Preview
In dit artikel wordt beschreven hoe u een opgeslagen procedure in SQL Server opnieuw compileert met behulp van Transact-SQL. Er zijn drie manieren om dit te doen: de WITH RECOMPILE optie in de proceduredefinitie of wanneer de procedure wordt aangeroepen, de RECOMPILE-query-hint op individuele instructies, of door gebruik te maken van de sp_recompile systeem opgeslagen procedure.
Voordat u begint
Recommendations
Wanneer een procedure voor het eerst wordt gecompileerd of opnieuw wordt gecompileerd, wordt het queryplan van de procedure geoptimaliseerd voor de huidige status van de database en de bijbehorende objecten. Als een database belangrijke wijzigingen in de gegevens of structuur ondergaat, moet u een procedure bijwerken en het queryplan van de procedure voor deze wijzigingen optimaliseren. Dit kan de verwerkingsprestaties van de procedure verbeteren.
Er zijn momenten waarop procedurehercompilatie moet worden afgedwongen en andere tijden wanneer deze automatisch plaatsvindt. Automatisch opnieuw compileren vindt plaats wanneer SQL Server opnieuw wordt opgestart. Het treedt ook op als een onderliggende tabel waarnaar wordt verwezen door de procedure fysieke ontwerpwijzigingen heeft ondergaan.
Een andere reden om een procedure opnieuw te compileren, is om het 'parameter sniffing'-gedrag bij procedurecompilatie tegen te gaan. Wanneer SQL Server procedures uitvoert, worden parameterwaarden die door de procedure worden gebruikt wanneer deze worden gecompileerd, opgenomen als onderdeel van het genereren van het queryplan. Als deze waarden de typische waarden vertegenwoordigen waarmee de procedure vervolgens wordt aangeroepen, profiteert de procedure van het queryplan telkens wanneer deze wordt gecompileerd en uitgevoerd. Als parameterwaarden voor de procedure vaak atypisch zijn, kan het afdwingen van een hercompilatie van de procedure en een nieuw plan op basis van verschillende parameterwaarden de prestaties verbeteren.
Sql Server bevat hercompilatie op instructieniveau van procedures. Wanneer SQL Server opgeslagen procedures opnieuw compileert, wordt alleen de instructie die de hercompilatie heeft veroorzaakt gecompileerd, 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 binnen die query's de RECOMPILE-queryhint te gebruiken. Omdat alleen de query's die de queryhint gebruiken, opnieuw worden gecompileerd in plaats van de volledige procedure, wordt het recompilatiegedrag op instructieniveau van SQL Server nagebootst. Maar naast het gebruik van de huidige parameterwaarden van de procedure, gebruikt de RECOMPILE-queryhint ook de waarden van lokale variabelen in de opgeslagen procedure bij het compileren van de instructie. Zie Queryhint (Transact-SQL) voor meer informatie.
Note
In toegewezen en serverloze Pools van Azure Synapse Analytics zijn opgeslagen procedures geen vooraf gecompileerde code en kunnen ze dus niet opnieuw worden gecompileerd. Zie Opgeslagen procedures gebruiken voor toegewezen SQL-pools in Azure Synapse Analytics voor meer informatie.
Security
Permissions
MET OPTIE VOOR OPNIEUW COMPILEREN
Als deze optie wordt gebruikt wanneer de proceduredefinitie wordt gemaakt, is de machtiging CREATE PROCEDURE in de database en ALTER-machtiging vereist voor het schema waarin de procedure wordt gemaakt.
Als deze optie wordt gebruikt in een EXECUTE-instructie, zijn EXECUTE-machtigingen vereist voor de procedure. Machtigingen zijn niet vereist voor de EXECUTE-instructie zelf, maar uitvoermachtigingen zijn vereist voor de procedure waarnaar wordt verwezen in de EXECUTE-instructie. Zie EXECUTE (Transact-SQL)voor meer informatie.
Hint voor recompile-query
Deze functie wordt gebruikt wanneer de procedure wordt gemaakt en de hint wordt opgenomen in Transact-SQL instructies in de procedure. Daarom vereist het create PROCEDURE-machtiging in de database en ALTER-machtiging voor het schema waarin de procedure wordt gemaakt.
sp_recompile systeemopgeslagen procedure
Vereist ALTER-machtiging voor de opgegeven procedure.
Using Transact-SQL
Maak verbinding met de database-engine.
Selecteer vanaf de Standard--balk Nieuwe query.
Kopieer en plak het volgende voorbeeld in het queryvenster en selecteer uitvoeren. In dit voorbeeld wordt de proceduredefinitie gemaakt.
USE AdventureWorks2022; 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;
Een opgeslagen procedure opnieuw compileren met de optie WITH RECOMPILE
Selecteer Nieuwe query en kopieer en plak het volgende codevoorbeeld in het queryvenster en selecteer Uitvoeren. Hiermee wordt de procedure uitgevoerd en wordt het queryplan van de procedure opnieuw gecompileerd.
USE AdventureWorks2022;
GO
EXECUTE HumanResources.uspProductByVendor WITH RECOMPILE;
GO
Een opgeslagen procedure opnieuw compileren met behulp van sp_recompile
Selecteer Nieuwe query en kopieer en plak het volgende voorbeeld in het queryvenster en selecteer Uitvoeren. Hiermee wordt de procedure niet uitgevoerd, maar wordt de procedure gemarkeerd die opnieuw moet worden gecompileerd, zodat het queryplan wordt bijgewerkt wanneer de procedure de volgende keer wordt uitgevoerd.
USE AdventureWorks2022;
GO
EXEC sp_recompile N'dbo.uspProductByVendor';
GO
Next steps
Een opgeslagen procedure maken
een opgeslagen procedure wijzigen
de naam van een opgeslagen procedure wijzigen
de definitie van een opgeslagen procedure weergeven
De afhankelijkheden van een opgeslagen procedure weergeven
DROP PROCEDURE (Transact-SQL)