Articles

Recompile a Stored Procedure

  • 10/28/2019
  • 4 minutes to read
    • s
    • m
    • m
    • d
    • m
    • +2

applies to: SQL Server (Wszystkie obsługiwane wersje) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Parallel Data Warehouse

ten temat opisuje jak przekompilować procedurę składowaną w SQL Server za pomocą Transact-SQL. Można to zrobić na trzy sposoby: z opcją RECOMPILE w definicji procedury lub przy wywołaniu procedury, podpowiedzią rekompilacji dla poszczególnych instrukcji lub przy użyciu procedury składowanej systemu sp_recompile. Ten temat opisuje użycie opcji z PRZEKOMPILOWANIEM podczas tworzenia definicji procedury i wykonywania istniejącej procedury. Opisuje również użycie procedury składowanej systemu sp_recompile do przekompilowania istniejącej procedury.

w tym temacie

  • zanim zaczniesz:

    zalecenia

    Bezpieczeństwo

  • aby przekompilować procedurę składowaną, używając:

    Transact-SQL

przed rozpoczęciem

rekomendacje

  • gdy procedura jest kompilowana po raz pierwszy lub rekompilowana, Plan zapytania procedury jest zoptymalizowany pod kątem bieżącego stanu bazy danych i jej obiektów. Jeśli baza danych ulega znaczącym zmianom w swoich danych lub strukturze, rekompilacja procedury aktualizuje i optymalizuje Plan zapytań dla tych zmian. Może to poprawić wydajność przetwarzania procedury.

  • są chwile, kiedy rekompilacja procedury musi być wymuszona i inne czasy, kiedy następuje ona automatycznie. Automatyczna rekompilacja następuje przy ponownym uruchomieniu serwera SQL. Ma to również miejsce, gdy tabela bazowa, do której odnosi się procedura, została poddana fizycznym zmianom konstrukcyjnym.

  • kolejnym powodem zmuszania procedury do rekompilacji jest przeciwdziałanie zachowaniu „parametr sniffing” kompilacji procedury. Gdy SQL Server wykonuje procedury, wszelkie wartości parametrów, które są używane przez procedurę podczas kompilacji, są uwzględniane jako część generowania planu zapytań. Jeśli te wartości reprezentują typowe wartości, z którymi procedura jest następnie wywoływana, to procedura korzysta z planu zapytań za każdym razem, gdy kompiluje i wykonuje. Jeśli wartości parametrów w procedurze są często nietypowe, wymuszenie przekompilowania procedury i nowego planu opartego na różnych wartościach parametrów może poprawić wydajność.

  • SQL Server oferuje rekompilację procedur na poziomie instrukcji. Gdy SQL Server rekompiluje procedury składowane, kompilowane jest tylko polecenie, które spowodowało rekompilację, zamiast kompletnej procedury.

  • Jeśli niektóre zapytania w procedurze regularnie używają nietypowych lub tymczasowych wartości, wydajność procedury można poprawić za pomocą podpowiedzi rekompilacji w tych zapytaniach. Ponieważ tylko zapytania wykorzystujące podpowiedź do zapytania będą rekompilowane zamiast pełnej procedury, zachowanie rekompilacji na poziomie instrukcji SQL Server jest naśladowane. Ale oprócz używania bieżących wartości parametrów procedury, podpowiedź rekompilacji używa również wartości dowolnych zmiennych lokalnych wewnątrz procedury składowanej podczas kompilacji instrukcji. Aby uzyskać więcej informacji, zobacz podpowiedź zapytania (Transact-SQL).

bezpieczeństwo

uprawnienia

z opcją PRZEKOMPILOWANIA
Jeśli ta opcja jest używana podczas tworzenia definicji procedury, wymaga ona CREATE PROCEDURE permission w bazie danych i zmiany uprawnień na schemacie, w którym procedura jest tworzona.

Jeśli ta opcja jest używana w instrukcji EXECUTE, wymaga ona uprawnień do wykonywania procedury. Uprawnienia nie są wymagane dla samej instrukcji EXECUTE, ale są wymagane dla procedury, o której mowa w instrukcji EXECUTE. Więcej informacji: EXECUTE (Transact-SQL).

REKOMPILUJ podpowiedź zapytania
ta funkcja jest używana, gdy procedura jest tworzona i podpowiedź jest zawarta w instrukcjach Transact-SQL w procedurze. W związku z tym wymaga pozwolenia CREATE PROCEDURE permission w bazie danych i zmiany uprawnień na schemacie, w którym procedura jest tworzona.

procedura składowana systemu sp_recompile
wymaga zmiany uprawnień dla podanej procedury.

używając Transact-SQL

  1. Połącz się z silnikiem bazy danych.

  2. na standardowym pasku kliknij nowe zapytanie.

  3. skopiuj i wklej poniższy przykład do okna zapytania i kliknij wykonaj. Ten przykład tworzy definicję procedury.

    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; 

aby przekompilować procedurę składowaną za pomocą opcji z PRZEKOMPILOWANIEM

wybierz nowe zapytanie, następnie skopiuj i wklej poniższy przykład kodu do okna zapytania i kliknij wykonaj. To powoduje wykonanie procedury i rekompiluje Plan zapytania procedury.

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

aby przekompilować procedurę składowaną za pomocą sp_recompile

wybierz nowe zapytanie, następnie skopiuj i wklej poniższy przykład do okna zapytania i kliknij wykonaj. To nie wykonuje procedury, ale zaznacza procedurę, która ma zostać przekompilowana, tak aby jej plan zapytań był aktualizowany przy następnym uruchomieniu procedury.

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

Zobacz również

Utwórz procedurę składowaną
zmodyfikuj procedurę składowaną
Zmień nazwę procedury składowanej
Zobacz definicję procedury składowanej
Zobacz zależności procedury składowanej
DROP PROCEDURE (Transact-SQL)