Articles

Rekompilere Til Lagret Prosedyre

  • 10/28/2019
  • 4 minutter å lese
  • s
  • M

  • M
  • d m

gjelder for: SQL Server (alle støttede versjoner)Azure SQL DatabaseAzure Synapse Analyticsparallel data warehouse

dette emnet beskriver hvordan du KOMPILERER en lagret prosedyre på nytt i sql server ved hjelp av transact-sql. DET er tre måter å gjøre dette på: MED REKOMPILERE alternativet i prosedyredefinisjonen eller når prosedyren kalles, REKOMPILERE spørringen hint på enkeltuttrykk, eller ved hjelp av sp_recompile system lagret prosedyre. Dette emnet beskriver bruk av ALTERNATIVET MED REKOMPILERING når du oppretter en prosedyredefinisjon og utfører en eksisterende prosedyre. Den beskriver også bruk av sp_recompile system lagret prosedyre for å kompilere en eksisterende prosedyre.

I Dette Emnet

  • Før du begynner:

    Anbefalinger

    Sikkerhet

  • :

    Transact-SQL

Før du Begynner

Anbefalinger

  • når en prosedyre kompileres for første gang eller kompileres på nytt, optimaliseres prosedyrens spørringsplan for den nåværende tilstanden til databasen og dens objekter. Hvis en database gjennomgår betydelige endringer i dataene eller strukturen, rekompilere en prosedyre oppdateringer og optimaliserer prosedyrens spørringsplan for disse endringene. Dette kan forbedre prosedyrens behandlingsytelse.

  • Det er tider når prosedyren rekompilering må tvinges og andre ganger når det skjer automatisk. Automatisk rekompilering skjer når SQL Server startes på nytt. Det skjer også hvis en underliggende tabell referert av prosedyren har gjennomgått fysiske designendringer.

  • En annen grunn til å tvinge en prosedyre til å rekompilere er å motvirke» parameter sniffing » oppførsel av prosedyre kompilering. NÅR SQL Server utfører prosedyrer, inkluderes alle parameterverdier som brukes av prosedyren når den kompilerer, som en del av genereringen av spørringsplanen. Hvis disse verdiene representerer de typiske som prosedyren senere kalles, drar prosedyren nytte av spørringsplanen hver gang den kompilerer og utfører. Hvis parameterverdier på prosedyren er ofte atypisk, tvinge en rekompilering av prosedyren og en ny plan basert på ulike parameterverdier kan forbedre ytelsen.

  • SQL Server har setningsnivå rekompilering av prosedyrer. NÅR SQL Server kompilerer lagrede prosedyrer, kompileres bare setningen som forårsaket rekompileringen, i stedet for hele prosedyren.

  • hvis enkelte spørringer i en prosedyre regelmessig bruker atypiske eller midlertidige verdier, kan prosedyrens ytelse forbedres ved Å BRUKE REKOMPILERINGSSPØRRINGSTIPSET i disse spørringene. SIDEN bare spørringene som bruker spørringstipset, blir kompilert på nytt i stedet for hele prosedyren, etterlignes virkemåten for rekompilering på setningsnivå FOR SQL Server. MEN I tillegg til å bruke prosedyrens gjeldende parameterverdier, BRUKER REKOMPILERINGSSPØRRINGSTIPSET også verdiene for eventuelle lokale variabler i den lagrede prosedyren når du kompilerer setningen. Hvis du vil ha Mer informasjon, kan du se Spørringstips (Transact-SQL).

Sikkerhet

Tillatelser

MED REKOMPILERE Alternativ
hvis dette alternativet brukes når prosedyredefinisjonen er opprettet, krever DET OPPRETT PROSEDYRE tillatelse i databasen og ENDRE tillatelse på skjemaet der prosedyren blir opprettet.

hvis dette alternativet brukes I EN EXECUTE-setning, krever DET KJØRETILLATELSER for prosedyren. Tillatelser kreves ikke PÅ SELVE KJØR-setningen, men kjør-tillatelser kreves på prosedyren referert I KJØR-setningen. HVIS du vil HA MER informasjon, kan DU SE UTFØRE (Transact-SQL).DENNE funksjonen brukes når prosedyren opprettes og hintet er inkludert I Transact-SQL-setninger i prosedyren. DERFOR krever OPPRETT PROSEDYRE tillatelse i databasen OG ENDRE tillatelse på skjemaet der prosedyren opprettes.

sp_recompile System Lagret Prosedyre
Krever ENDRE tillatelse på den angitte prosedyren.

Bruke Transact-SQL

  1. Koble Til Databasemotoren.

  2. Klikk Ny Spørring På standardlinjen.

  3. Kopier og lim inn følgende eksempel i spørringsvinduet og klikk Kjør. Dette eksemplet oppretter prosedyredefinisjonen.

    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; 

for å kompilere en lagret prosedyre på nytt ved å bruke ALTERNATIVET MED REKOMPILERING

velg Ny Spørring, kopier og lim inn følgende kodeeksempel i spørringsvinduet og klikk Kjør. Dette utfører prosedyren og kompilerer prosedyrens spørringsplan på nytt.

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

for å kompilere en lagret prosedyre på nytt Ved hjelp av sp_recompile

velg Ny Spørring, kopier og lim inn følgende eksempel i spørringsvinduet og klikk Kjør. Dette utfører ikke prosedyren, men det markerer prosedyren som skal kompileres på nytt, slik at spørringsplanen oppdateres neste gang prosedyren utføres.

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

Se også

Opprett En Lagret Prosedyre
Endre En Lagret Prosedyre
Gi Nytt Navn Til En Lagret Prosedyre
Vis Definisjonen av En Lagret Prosedyre
VIS Avhengighetene til En Lagret Prosedyre
DROP PROCEDURE (Transact-SQL)