Articles

Překompilovat Uložené Procedury

  • 10/28/2019
  • 4 minuty ke čtení
    • M
    • m
    • d
    • m
    • +2

platí: SQL Server (všechny podporované verze) Databáze SQL Azure SQL Azure Managed Instance Azure Synapse Analytics Paralelní Datového Skladu

Toto téma popisuje, jak překompilovat uložené procedury v SQL Server pomocí Transact-SQL. Existují tři způsoby, jak to udělat: S PŘEKOMPILOVAT možnost v definici postup, nebo pokud postup se nazývá, PŘEKOMPILUJTE dotazu na jednotlivé příkazy, nebo pomocí sp_recompile systému uložené procedury. Toto téma popisuje použití možnosti s REKOMPILEM při vytváření definice procedury a provádění existující procedury. Popisuje také použití uložené procedury sp_recompile system k rekompilaci existující procedury.

v tomto tématu

  • než začnete:

    doporučení

    zabezpečení

  • překompilovat uloženou proceduru pomocí:

    Transact-SQL

předtím, Než Začnete

Doporučení

  • Když postup je sestaven pro první čas, nebo recompiled, postup je plán dotazu je optimalizován pro současný stav databázi a její objekty. Pokud databáze prochází významnými změnami ve svých datech nebo struktuře, překompilování procedury aktualizuje a optimalizuje plán dotazů procedury pro tyto změny. To může zlepšit výkon zpracování postupu.

  • jsou chvíle, kdy musí být rekompilace procedury vynucena, a jindy, když k ní dojde automaticky. Automatické překompilování dochází vždy, když je restartován SQL Server. K tomu také dochází, pokud základní tabulka, na kterou odkazuje postup, prošla fyzickými změnami návrhu.

  • dalším důvodem, proč vynutit rekompilaci procedury, je potlačení chování“ sniffing parametrů “ kompilace procedur. Při SQL Server provede postupy, žádné hodnoty parametrů, které jsou používány postup při kompilaci jsou zahrnuty jako součást generování plánu dotazu. Pokud tyto hodnoty představují typické hodnoty, se kterými je procedura následně volána, pak postup těží z plánu dotazu pokaždé, když se kompiluje a provádí. Pokud jsou hodnoty parametrů v proceduře často atypické, vynucení rekompilace procedury a nový plán založený na různých hodnotách parametrů může zlepšit výkon.

  • SQL Server nabízí rekompilaci procedur na úrovni příkazů. Když SQL Server rekompiluje uložené procedury, místo celého postupu se zkompiluje pouze příkaz, který způsobil rekompilaci.

  • Pokud některé dotazy v proceduře pravidelně používají atypické nebo dočasné hodnoty, výkon procedury lze zlepšit pomocí nápovědy pro PŘEKOMPILOVANÝ dotaz uvnitř těchto dotazů. Vzhledem k tomu, že namísto úplného postupu budou překompilovány pouze dotazy pomocí nápovědy dotazu, je napodobeno chování rekompilace na úrovni příkazů SQL Server. Kromě použití aktuálních hodnot parametrů procedury však Nápověda pro dotaz na rekompilaci při kompilaci příkazu také používá hodnoty všech lokálních proměnných uvnitř uložené procedury. Další informace naleznete v nápovědě k dotazu (Transact-SQL).

Bezpečnost

Permissions

S PŘEKOMPILOVAT Option
Pokud je tato volba se používá při definici postup je vytvořen, to vyžaduje VYTVOŘIT ŘÍZENÍ oprávnění v databázi a ALTER oprávnění schématu, ve kterém je postup vytvořen.

Pokud je tato volba použita v příkazu EXECUTE, vyžaduje oprávnění EXECUTE k proceduře. Oprávnění nejsou vyžadována v samotném příkazu EXECUTE, ale oprávnění execute jsou vyžadována u procedury uvedené v příkazu EXECUTE. Další informace naleznete v části EXECUTE (Transact-SQL).

recompile Query Tip
Tato funkce se používá při vytvoření procedury a nápověda je součástí příkazů Transact-SQL v proceduře. Proto vyžaduje vytvoření oprávnění procedury v databázi a změnu oprávnění na schématu, ve kterém je procedura vytvářena.

procedura uložená v sp_recompile System
vyžaduje povolení změny zadaného postupu.

pomocí Transact-SQL

  1. Připojte se k databázovému stroji.

  2. na Standardním panelu klikněte na nový dotaz.

  3. zkopírujte a vložte následující příklad do okna dotazu a klikněte na Execute. Tento příklad vytvoří definici postupu.

    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; 

překompilovat uložené procedury pomocí WITH PŘEKOMPILOVAT option

Vyberte Nový Dotaz, zkopírujte a vložte následující příklad kódu do okna dotazu a klepněte na tlačítko Spustit. Tím se provede procedura a překompiluje plán dotazu procedury.

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

překompilovat uložené procedury pomocí sp_recompile

Vyberte Nový Dotaz, zkopírujte a vložte následující příklad do okna dotazu a klepněte na tlačítko Spustit. To neprovádí postup, ale označuje postup, který má být překompilován, takže jeho plán dotazů je aktualizován při příštím provedení postupu.

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

Viz Také

Vytvoření Uložené Procedury
Upravit Uložené Procedury
Přejmenovat Uložené Procedury
Zobrazit Definici Uložené Procedury
Zobrazit Závislosti z Uložená Procedura
DROP PROCEDURE (Transact-SQL)