Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Elemzési platformrendszer (PDW)
SQL-adatbázis a Microsoft Fabricben
Ez a cikk bemutatja, hogyan lehet újrafordíteni egy tárolt eljárást az SQL Serveren a Transact-SQL használatával. Ezt három módon teheti meg: WITH RECOMPILE az eljárás definíciójában vagy az eljárás meghívásakor, a RECOMPILE lekérdezési utasítás használatával egyes utasításokra, vagy a sp_recompile rendszerben tárolt eljárás használatával.
Mielőtt hozzákezdene
Recommendations
Amikor egy eljárás első alkalommal van lefordítva vagy újrafordított, az eljárás lekérdezési terve az adatbázis és az objektumok aktuális állapotához lesz optimalizálva. Ha egy adatbázis adataiban vagy szerkezetében jelentős változások történnek, az eljárás újrafordítása frissíti és optimalizálja az eljárás lekérdezési tervét ezekhez a módosításokhoz. Ez javíthatja az eljárás feldolgozási teljesítményét.
Vannak olyan esetek, amikor az eljárás újrafordítását kényszeríteni kell, máskor pedig automatikusan. Amikor az SQL Server újraindul, automatikusan megtörténik az újrafordítás. Akkor is előfordul, ha az eljárás által hivatkozott mögöttes tábla fizikai tervezési változásokon ment keresztül.
Egy eljárás újrafordításra kényszerítésének másik oka az eljárás fordításának "paraméterszimatolás" viselkedésének ellensúlyozása. Amikor az SQL Server végrehajtja az eljárásokat, az eljárás által fordításkor használt paraméterértékek a lekérdezési terv generálásának részeként lesznek belefoglalva. Ha ezek az értékek azokat a tipikus értékeket jelölik, amelyekkel az eljárást később meghívják, akkor az eljárás a lekérdezési terv előnyeit élvezi minden alkalommal, amikor lefordítja és végrehajtja. Ha az eljárás paraméterértékei gyakran atipikusak, az eljárás újrafordításának kényszerítése és a különböző paraméterértékeken alapuló új terv növelheti a teljesítményt.
Az SQL Server az eljárások utasításszintű újrafordításával rendelkezik. Ha az SQL Server újrafordítást végez a tárolt eljárásokon, a teljes eljárás helyett csak az újrafordítást okozó utasítás lesz lefordítva.
Ha egy eljárás egyes lekérdezései rendszeresen atipikus vagy ideiglenes értékeket használnak, az eljárás teljesítménye javítható a lekérdezésekben található RECOMPILE lekérdezési tipp használatával. Mivel a teljes eljárás helyett csak a lekérdezési tippet használó lekérdezések lesznek újrafordítve, az SQL Server utasításszintű újrafordítási viselkedését utánozza a rendszer. Az eljárás aktuális paraméterértékeinek használata mellett azonban a RECOMPILE lekérdezési tipp a tárolt eljárásban lévő helyi változók értékeit is használja az utasítás lefordításakor. További információ: Lekérdezési tipp (Transact-SQL).
Note
Az Azure Synapse Analytics dedikált és kiszolgáló nélküli készleteiben a tárolt eljárások nem előre lefordított kódok, ezért nem fordíthatók újra. További információ: Tárolt eljárások használata dedikált SQL-készletekhez az Azure Synapse Analyticsben.
Biztonság
Permissions
ÚJRAFORDÍTÁS OPCIÓval
Ha ezt a beállítást az eljárásdefiníció létrehozásakor használják, akkor CREATE PROCEDURE engedélyre van szükség az adatbázisban, és ALTER engedélyre azon a sémán, amelyben az eljárás létrejön.
Ha ez a beállítás egy EXECUTE utasításban van használatban, az eljáráshoz VÉGREHAJTÁSI engedélyekre van szükség. Az EXECUTE utasításhoz nincs szükség engedélyekre, de végrehajtási engedélyekre van szükség az EXECUTE utasításban hivatkozott eljáráshoz. További információ: EXECUTE (Transact-SQL).
RECOMPILE lekérdezési utasítás
Ez a funkció akkor használatos, amikor az eljárás létrejön, és a tipp szerepel Transact-SQL utasításokban az eljárásban. Ezért create procedure engedélyt igényel az adatbázisban, és alter engedélyt arra a sémára, amelyben az eljárás létrejön.
sp_recompile rendszer által tárolt eljárás
A megadott eljáráshoz ALTER-engedély szükséges.
Transact-SQL használata
Csatlakozzon az adatbázismotorhoz.
A Standard sávon válassza Új lekérdezéslehetőséget.
Másolja és illessze be a következő példát a lekérdezési ablakba, és válassza az Végrehajtás lehetőséget. Ez a példa létrehozza az eljárásdefiníciót.
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;
Tárolt eljárás újrafordítása a WITH RECOMPILE beállítással
Válassza az Új lekérdezés lehetőséget, majd másolja és illessze be a következő kódpéldát a lekérdezés ablakába, és válassza a Végrehajtás lehetőséget. Ez végrehajtja az eljárást, és újrafordítja az eljárás lekérdezési tervét.
USE AdventureWorks2022;
GO
EXECUTE HumanResources.uspProductByVendor WITH RECOMPILE;
GO
Tárolt eljárás újrafordítása sp_recompile használatával
Válassza az Új lekérdezés lehetőséget, majd másolja és illessze be a következő példát a lekérdezési ablakba, és válassza a Végrehajtás lehetőséget. Ez nem hajtja végre az eljárást, de megjelöli az újrafordításhoz szükséges eljárást, hogy a lekérdezésterv a következő alkalommal frissüljön, amikor az eljárást végrehajtja.
USE AdventureWorks2022;
GO
EXEC sp_recompile N'dbo.uspProductByVendor';
GO
Következő lépések
Tárolt eljárás létrehozása
Tárolt eljárás módosítása
Tárolt eljárás átnevezése
Tárolt eljárás definíciójának megtekintése
Tárolt eljárás függőségeinek megtekintése
ELJÁRÁS ELTÁVOLÍTÁSA (Transact-SQL)