Articles

recompilați la procedura stocată

  • 10/28/2019
  • 4 minute pentru a citi
    • s
    • M
    • m
    • d
    • m

  • +2

se aplică: SQL Server (toate versiunile acceptate)Azure SQL DatabaseAzure SQL gestionat instanțăAzure Synapse Analyticsparallel Data Warehouse

acest subiect descrie cum să recompilați o procedură stocată în SQL Server utilizând Transact-SQL. Există trei moduri de a face acest lucru: cu opțiunea RECOMPILE în definiția procedurii sau când procedura este apelată, sugestia de interogare RECOMPILE pe instrucțiuni individuale sau utilizând procedura stocată a sistemului sp_recompile. Acest subiect descrie utilizarea opțiunii cu recompilare atunci când se creează o definiție a procedurii și se execută o procedură existentă. De asemenea, descrie utilizarea procedurii stocate a sistemului sp_recompile pentru a recompila o procedură existentă.

în acest subiect

  • înainte de a începe:

    recomandări

    securitate

  • pentru a recompila o procedură stocată, folosind:

    Transact-SQL

înainte de a începe

recomandări

  • când o procedură este compilată pentru prima dată sau recompilată, planul de interogare al procedurii este optimizat pentru starea curentă a bazei de date și a obiectelor sale. Dacă o bază de date suferă modificări semnificative ale datelor sau structurii sale, recompilarea unei proceduri actualizează și optimizează planul de interogare al procedurii pentru acele modificări. Acest lucru poate îmbunătăți performanța de procesare a procedurii.

  • există momente când recompilarea procedurii trebuie forțată și alte momente când apare automat. Recompilarea automată are loc ori de câte ori SQL Server este repornit. De asemenea, apare dacă un tabel de bază la care se face referire prin procedură a suferit modificări fizice de proiectare.

  • un alt motiv pentru a forța o procedură pentru a recompila este de a contracara comportamentul „parametru sniffing” de compilare procedură. Când SQL Server execută proceduri, orice valori de parametri care sunt utilizate de procedură atunci când compilează sunt incluse ca parte a generării planului de interogare. Dacă aceste valori reprezintă cele tipice cu care procedura este apelată ulterior, atunci procedura beneficiază de planul de interogare de fiecare dată când compilează și execută. Dacă valorile parametrilor din procedură sunt frecvent atipice, forțarea unei recompile a procedurii și a unui nou plan bazat pe valori diferite ale parametrilor poate îmbunătăți performanța.

  • SQL Server dispune de recompilare la nivel de declarație a procedurilor. Când SQL Server recompilează procedurile stocate, numai declarația care a cauzat recompilarea este compilat, în loc de procedura completă.

  • dacă anumite interogări dintr-o procedură utilizează în mod regulat valori atipice sau temporare, performanța procedurii poate fi îmbunătățită utilizând sugestia de recompilare a interogării din interiorul acestor interogări. Deoarece numai interogările care utilizează indiciul de interogare vor fi recompilate în loc de procedura completă, comportamentul de recompilare la nivel de instrucțiune SQL Server este imitat. Dar, pe lângă utilizarea valorilor parametrilor actuali ai procedurii, sugestia de interogare RECOMPILE folosește și valorile oricăror variabile locale din interiorul procedurii stocate atunci când compilați instrucțiunea. Pentru mai multe informații, consultați sugestie de interogare (Transact-SQL).

securitate

permisiuni

cu opțiunea recompilați
dacă această opțiune este utilizată atunci când este creată definiția procedurii, este nevoie creați permisiunea procedurii în baza de date și modificați permisiunea pe schema în care se creează procedura.

dacă această opțiune este utilizată într-o instrucțiune EXECUTE, este nevoie de permisiuni de executare pentru procedură. Permisiunile nu sunt necesare pentru instrucțiunea EXECUTE în sine, dar permisiunile execute sunt necesare pentru procedura la care se face referire în instrucțiunea EXECUTE. Pentru mai multe informații, consultați executare (Transact-SQL).

recompilați sugestie de interogare
această caracteristică este utilizată atunci când procedura este creată și indiciu este inclus în instrucțiunile Transact-SQL în procedura. Prin urmare, este nevoie de a crea permisiunea de procedură în baza de date și modifica permisiunea pe schema în care se creează procedura.

sp_recompile sistem stocate procedură
necesită permisiunea modifica pe procedura specificată.

folosind Transact-SQL

  1. Conectați-vă la motorul bazei de date.

  2. Din bara Standard, faceți clic pe Interogare nouă.

  3. copiați și lipiți următorul exemplu în fereastra de interogare și faceți clic pe Executare. Acest exemplu creează definiția procedurii.

    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; 

pentru a recompila o procedură stocată utilizând opțiunea cu recompilare

selectați Interogare nouă, apoi copiați și lipiți următorul exemplu de cod în fereastra de interogare și faceți clic pe Executare. Aceasta execută procedura și recompilează planul de interogare al procedurii.

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

pentru a recompila o procedură stocată utilizând sp_recompile

selectați Interogare nouă, apoi copiați și lipiți următorul exemplu în fereastra de interogare și faceți clic pe Executare. Aceasta nu execută procedura, dar marchează procedura care urmează să fie recompilată, astfel încât planul său de interogare să fie actualizat la următoarea execuție a procedurii.

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

Vezi si

crearea unei proceduri stocate
modificarea unei proceduri stocate
redenumirea unei proceduri stocate
vezi definitia unei proceduri stocate
vezi dependentele unei proceduri stocate
procedura DROP (Transact-SQL)