Articles

Recompile a Stored Procedure

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

Applies to: SQL Server (tutte le versioni supportate) Azure SQL Database Azure SQL Istanza Gestita Azure Sinapsi Analytics Parallel Data Warehouse

Questo argomento viene descritto come ricompilare una stored procedure in SQL Server Transact-SQL. Esistono tre modi per farlo: CON l’opzione RICOMPILA nella definizione della procedura o quando viene chiamata la procedura, il suggerimento RICOMPILA query su singole istruzioni o utilizzando la stored procedure di sistema sp_recompile. Questo argomento descrive l’uso dell’opzione CON RICOMPILA quando si crea una definizione di procedura ed esegue una procedura esistente. Descrive inoltre l’utilizzo della stored procedure di sistema sp_recompile per ricompilare una procedura esistente.

In questo argomento

  • Prima di iniziare:

    Raccomandazioni

    Sicurezza

  • Per ricompilare una stored procedure, utilizzando:

    Transact-SQL

Prima di iniziare

Raccomandazioni

  • Quando una procedura viene compilata per la prima volta o ricompilata, il piano di query della procedura viene ottimizzato per lo stato corrente del database e dei relativi oggetti. Se un database subisce modifiche significative ai suoi dati o alla sua struttura, la ricompilazione di una procedura aggiorna e ottimizza il piano di query della procedura per tali modifiche. Ciò può migliorare le prestazioni di elaborazione della procedura.

  • Ci sono momenti in cui la ricompilazione della procedura deve essere forzata e altre volte in cui si verifica automaticamente. La ricompilazione automatica si verifica ogni volta che SQL Server viene riavviato. Si verifica anche se una tabella sottostante a cui fa riferimento la procedura ha subito modifiche di progettazione fisica.

  • Un altro motivo per forzare una procedura a ricompilare è quello di contrastare il comportamento di “sniffing dei parametri” della compilazione della procedura. Quando SQL Server esegue le procedure, tutti i valori dei parametri utilizzati dalla procedura durante la compilazione vengono inclusi come parte della generazione del piano di query. Se questi valori rappresentano quelli tipici con cui viene successivamente chiamata la procedura, la procedura beneficia del piano di query ogni volta che viene compilato ed eseguito. Se i valori dei parametri sulla procedura sono spesso atipici, forzare una ricompilazione della procedura e un nuovo piano basato su valori di parametri diversi può migliorare le prestazioni.

  • SQL Server presenta la ricompilazione delle procedure a livello di istruzione. Quando SQL Server ricompila le stored procedure, viene compilata solo l’istruzione che ha causato la ricompilazione, anziché la procedura completa.

  • Se alcune query in una procedura utilizzano regolarmente valori atipici o temporanei, le prestazioni della procedura possono essere migliorate utilizzando il suggerimento RICOMPILA query all’interno di tali query. Poiché solo le query che utilizzano il suggerimento query verranno ricompilate anziché la procedura completa, il comportamento di ricompilazione a livello di istruzione di SQL Server viene imitato. Ma oltre a utilizzare i valori dei parametri correnti della procedura, il suggerimento RICOMPILA query utilizza anche i valori di qualsiasi variabile locale all’interno della stored procedure quando si compila l’istruzione. Per ulteriori informazioni, vedere Suggerimento query (Transact-SQL).

Sicurezza

Autorizzazioni

CON l’opzione RICOMPILA
Se questa opzione viene utilizzata quando viene creata la definizione della procedura, richiede l’autorizzazione CREA PROCEDURA nel database e MODIFICA l’autorizzazione sullo schema in cui viene creata la procedura.

Se questa opzione viene utilizzata in un’istruzione EXECUTE, richiede le autorizzazioni EXECUTE sulla procedura. Le autorizzazioni non sono richieste sull’istruzione EXECUTE stessa, ma le autorizzazioni execute sono richieste sulla procedura a cui si fa riferimento nell’istruzione EXECUTE. Per ulteriori informazioni, vedere EXECUTE (Transact-SQL).

RICOMPILA suggerimento query
Questa funzione viene utilizzata quando viene creata la procedura e il suggerimento è incluso nelle istruzioni Transact-SQL nella procedura. Pertanto, richiede l’autorizzazione CREA PROCEDURA nel database e MODIFICA l’autorizzazione sullo schema in cui viene creata la procedura.

sp_recompile System Stored Procedure
Richiede l’autorizzazione ALTER sulla procedura specificata.

Utilizzando Transact-SQL

  1. Connettersi al motore di database.

  2. Dalla barra standard, fare clic su Nuova query.

  3. Copiare e incollare il seguente esempio nella finestra di query e fare clic su Esegui. Questo esempio crea la definizione della procedura.

    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; 

Per ricompilare una stored procedure utilizzando l’opzione WITH RICOMPILE

Selezionare Nuova query, quindi copiare e incollare il seguente esempio di codice nella finestra query e fare clic su Esegui. Questo esegue la procedura e ricompila il piano di query della procedura.

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

Per ricompilare una stored procedure utilizzando sp_recompile

Selezionare Nuova query, quindi copiare e incollare il seguente esempio nella finestra query e fare clic su Esegui. Questo non esegue la procedura ma contrassegna la procedura da ricompilare in modo che il suo piano di query venga aggiornato la prossima volta che la procedura viene eseguita.

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

Vedi Anche

Creare una Stored Procedure
Modificare una Stored Procedure
Rinominare una Stored Procedure
Vista la Definizione di una Stored Procedure
Visualizzare le Dipendenze di una Stored Procedure
DROP PROCEDURE (Transact-SQL)