Articles

Recompile to Stored Procedure

  • 10/28/2019
  • 4 minutes to read
  • s
  • M

  • M
  • d m

  • +2

koskee: SQL Server (kaikki tuetut versiot) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Parallel Data Warehouse

tässä aihepiirissä kuvataan, miten SQL-palvelimeen tallennettu menettely käännetään Transact-SQL-menetelmällä. On olemassa kolme tapaa tehdä tämä: RECOMPILE vaihtoehto menettelyn määritelmä tai kun menettelyä kutsutaan, RECOMPILE kyselyn vihje yksittäisiä lausuntoja, tai käyttämällä sp_recompile järjestelmä tallennettu menettely. Tässä aihepiirissä kuvataan kanssa käännettävä-asetuksen käyttöä, kun luodaan menettelyn määrittely ja suoritetaan olemassa oleva menettely. Se kuvaa myös sp_recompile-järjestelmän tallennetun menettelyn käyttämistä olemassa olevan menettelyn kääntämiseen.

tässä aiheessa

  • ennen kuin aloitat:

    suositukset

    turvallisuus

  • :

    Transact-SQL

ennen kuin aloitat

suositukset

  • Kun toimenpide kootaan ensimmäistä kertaa tai käännetään uudelleen, on menettelyn kyselysuunnitelma optimoitu tietokannan ja sen objektien nykytilaan. Jos tietokantaan tehdään merkittäviä muutoksia sen tietoihin tai rakenteeseen, menettelyn kääntäminen uudelleen päivittää ja optimoi menettelyn kyselysuunnitelman näiden muutosten osalta. Tämä voi parantaa menettelyn käsittelyn suorituskykyä.

  • on aikoja, jolloin menettelyn uudelleenkomplikointi on pakko tehdä, ja toisina aikoina se tapahtuu automaattisesti. Automaattinen kääntäminen tapahtuu aina, kun SQL Server käynnistetään uudelleen. Näin tapahtuu myös silloin, jos menettelyssä viitattavaan taulukkoon on tehty fyysisiä muutoksia.

  • toinen syy pakottaa menettely kääntymään uudelleen on vastustaa toimenpiteen koostamisen ”parametrin haistelua”. Kun SQL Server suorittaa prosesseja, kaikki parametriarvot, joita menettely käyttää laatiessaan kyselysuunnitelmaa, sisällytetään kyselysuunnitelman generointiin. Jos nämä arvot edustavat niitä tyypillisiä arvoja, joilla menettelyä myöhemmin kutsutaan, menettely hyötyy kyselysuunnitelmasta aina, kun se laatii ja suorittaa. Jos menettelyn parametriarvot ovat usein epätyypillisiä, prosessin kääntämisen ja eri parametriarvoihin perustuvan uuden suunnitelman pakottaminen voi parantaa suorituskykyä.

  • SQL Server-palvelimessa on statement-tason uudelleenkompilointi menettelyistä. Kun SQL Server palauttaa tallennetut menettelyt, koko prosessin sijasta laaditaan vain lauseke, joka aiheutti palautuksen.

  • Jos tietyissä menettelyyn liittyvissä kyselyissä käytetään säännöllisesti epätyypillisiä tai tilapäisiä arvoja, menettelyn suorituskykyä voidaan parantaa käyttämällä näiden kyselyjen sisällä olevaa KÄÄNTEISVIHJETTÄ. Koska vain kyselyt, joissa käytetään kyselyvinkkiä, käännetään uudelleen koko menettelyn sijaan, jäljitellään SQL Serverin lauseketason palautuskäyttäytymistä. Mutta sen lisäksi, että käytetään menettelyn nykyisiä parametriarvoja, KÄÄNTEISKYSELYN vihje käyttää myös tallennetun menettelyn sisällä olevien paikallisten muuttujien arvoja, kun laadit lausunnon. Lisätietoja, Katso kysely Vihje (Transact-SQL).

turvallisuus

käyttöoikeudet

uudelleen käännettävällä valinnalla
Jos tätä valintaa käytetään, kun prosessin määrittely luodaan, se vaatii prosessin luontioikeuden tietokantaan ja luvan muuttamisen skeemaan, jossa menettelyä luodaan.

Jos tätä asetusta käytetään SUORITUSLAUSEKKEESSA, se edellyttää SUORITUSOIKEUKSIA menettelyssä. Käyttöoikeuksia ei vaadita SUORITUSLAUSEKKEESSA itsessään, mutta suoritusoikeuksia vaaditaan SUORITUSLAUSEKKEESSA viitatulla menettelyllä. Lisätietoja on ohjeaiheessa suorita (Transact-SQL).

uudelleen käännettävä Kyselyvinkki
tätä ominaisuutta käytetään, kun menettely luodaan ja vihje sisällytetään Transact-SQL-lauseisiin menettelyssä. Siksi se edellyttää luoda menettely lupaa tietokantaan ja muuttaa lupaa skeema, jossa menettely on luotu.

sp_recompile System Stored Procedure
Requires ALTER permission on the specified procedure.

Transact-SQL

  1. Yhdistä Tietokantamoottoriin.

  2. valitse Vakiopalkista uusi kysely.

  3. kopioi ja liitä seuraava esimerkki kyselyikkunaan ja napsauta Suorita. Tämä esimerkki luo menettelyn määritelmä.

    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; 

jos haluat kääntää tallennetun menettelyn uudelleen käyttämällä WITH RECOMPILE-vaihtoehtoa

Valitse Uusi kysely, kopioi ja liitä seuraava koodiesimerkki kyselyikkunaan ja valitse Suorita. Tämä suorittaa menettelyn ja laatii uudelleen menettelyn kyselysuunnitelman.

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

kääntääksesi tallennetun menettelyn uudelleen käyttämällä sp_recompile

Valitse Uusi kysely, kopioi ja liitä seuraava esimerkki kyselyikkunaan ja napsauta Suorita. Tämä ei suorita toimenpidettä, mutta se merkitsee uudelleen käännettävän menettelyn niin, että sen kyselysuunnitelma päivitetään seuraavan kerran, kun menettely suoritetaan.

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

Katso myös

luo tallennettu menettely
muokkaa tallennettua menettelyä
nimeä tallennettu menettely
Katso tallennetun menettelyn määritelmä
Katso tallennetun menettelyn riippuvuudet
DROP-menettely (Transact-SQL)