Újrafordítani a Tárolt Eljárás
- 10/28/2019
- 4 perc olvasni
-
- s
- M
- m
- d
- m
-
+2
vonatkozik: SQL Server (minden támogatott verzió) Azure SQL Database Azure SQL felügyelt példány Azure Synapse Analytics párhuzamos adattárház
Ez a témakör leírja, hogyan lehet újrafordítani egy tárolt eljárást SQL Server segítségével Transact-SQL. Ennek három módja van: a RECOMPILE opcióval az eljárás meghatározásában vagy az eljárás meghívásakor, az egyes kijelentésekre vonatkozó RECOMPILE query tipp, vagy a sp_recompile rendszer tárolt eljárásának használatával. Ez a témakör az eljárás definíciójának létrehozásakor, illetve egy meglévő eljárás végrehajtásakor a WITH RECOMPILE opció használatát írja le. Azt is leírja, hogy a sp_recompile rendszer tárolt eljárást használja egy meglévő eljárás újrakompilálásához.
ebben a témában
-
mielőtt elkezdené:
ajánlások
biztonság
-
a tárolt eljárás újrakompilálásához, a:
Transact-SQL
Mielőtt elkezdené
ajánlások
-
amikor az eljárást először összeállítják vagy újraszámolják, az eljárás lekérdezési tervét optimalizálják az adatbázis aktuális állapotára és objektumaira. Ha egy adatbázis jelentős változásokon megy keresztül az adataiban vagy struktúrájában, az eljárás frissítésének újrakomponálása, valamint az eljárás lekérdezési tervének optimalizálása az ilyen változásokhoz. Ez javíthatja az eljárás feldolgozási teljesítményét.
-
vannak esetek, amikor az eljárás újrakompilálását kényszeríteni kell, máskor pedig automatikusan megtörténik. Az automatikus újrakomponálás akkor történik, amikor az SQL Server újraindul. Ez akkor is előfordul, ha az eljárás által hivatkozott mögöttes táblázat fizikai tervezési változásokon ment keresztül.
-
az eljárás újrakompilálására való kényszerítés másik oka az eljárás összeállításának “paraméterszippantás” viselkedésének ellensúlyozása. Amikor az SQL Server eljárásokat hajt végre, az eljárás által a fordításkor használt paraméterértékek a lekérdezési terv generálásának részeként szerepelnek. Ha ezek az értékek reprezentálják azokat a jellemzőket, amelyekkel az eljárást később hívják, akkor az eljárás minden alkalommal, amikor összeállítja, végrehajtja a lekérdezési tervet. Ha az eljárás paraméterértékei gyakran atipikusak, az eljárás újrakomponálásának kényszerítése, valamint a különböző paraméterértékeken alapuló új terv javíthatja a teljesítményt.
-
SQL Server funkciók utasítás szintű újrakompilálása eljárások. Amikor az SQL Server újrafordítja a tárolt eljárásokat, a teljes eljárás helyett csak az újrakompilációt okozó utasítás kerül összeállításra.
-
Ha az 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éseken belüli ÚJRAKOMPILÁLÁSI tipp használatával. Mivel csak a lekérdezést használó lekérdezések kerülnek újrafordításra a teljes eljárás helyett, az SQL Server utasításszintű újrakompilálási viselkedése utánzásra kerül. De az eljárás aktuális paraméterértékeinek használata mellett a RECOMPILE query hint a tárolt eljáráson belüli helyi változók értékeit is használja a nyilatkozat összeállításakor. További információ: Query Hint (Transact-SQL).
Security
Permissions
a RECOMPILE opció
Ha ezt az opciót használják, amikor az eljárás meghatározása jön létre, akkor létre kell hozni eljárás engedélyt az adatbázisban, és módosítsa engedélyt a séma, amelyben az eljárás jön létre.
Ha ezt az opciót egy EXECUTE utasítás használja, akkor az eljáráshoz végrehajtási engedélyekre van szükség. Az engedélyek nem szükségesek az EXECUTE nyilatkozatban, de az EXECUTE Nyilatkozatban hivatkozott eljáráshoz engedélyekre van szükség. További információ: EXECUTE (Transact-SQL).
recompile Query Hint
ezt a funkciót akkor használjuk, amikor az eljárás létrejön, és a hint szerepel a Transact-SQL utasításokban az eljárásban. Ezért szükséges az adatbázisban az ELJÁRÁSENGEDÉLY létrehozása, valamint az eljárás létrehozásának sémájára vonatkozó engedély módosítása.
sp_recompile System Stored Procedure
megköveteli a megadott eljárás megváltoztatásának engedélyét.
Transact-SQL
-
Csatlakozás az adatbázis motorhoz.
-
a Standard sávból kattintson az Új lekérdezés lehetőségre.
-
másolja be a következő példát a lekérdezési ablakba, majd kattintson a Végrehajtás gombra. Ez a példa létrehozza az eljárás meghatározását.
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;
A tárolt eljárás újrakomponálásához a
RECOMPILE opcióval válassza ki az új lekérdezést, majd másolja be a következő kódpéldát a lekérdezés ablakába, majd kattintson a Végrehajtás gombra. Ez végrehajtja az eljárást, majd újrafordítja az eljárás lekérdezési tervét.
USE AdventureWorks2012; GO EXECUTE HumanResources.uspProductByVendor WITH RECOMPILE; GO
a tárolt eljárás újrafordításához használja a sp_recompile
új lekérdezést, majd másolja be a következő példát a lekérdezés ablakába, majd kattintson a Végrehajtás gombra. Ez nem hajtja végre az eljárást, de megjelöli az újrafordítandó eljárást, hogy lekérdezési tervét az eljárás következő végrehajtásakor frissítsék.
USE AdventureWorks2012; GO EXEC sp_recompile N'dbo.uspProductByVendor'; GO
Lásd még:
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 meghatározása megtekintése
tárolt eljárás függősége
DROP eljárás (Transact-SQL)
Leave a Reply