Condividi tramite


Progettazione e implementazione di guide di piano

Data aggiornamento: 15 settembre 2007

È possibile utilizzare le guide di piano per ottimizzare le prestazioni delle query quando non è possibile o non si desidera modificare direttamente il testo della query. È possibile creare guide di piano che corrispondono a query eseguite nei contesti seguenti:

  • Le guide di piano di tipo OBJECT corrispondono alle query eseguite nel contesto di stored procedure Transact-SQL, funzioni scalari, funzioni valutate a livello di tabella con istruzioni multiple e trigger DML.
  • Le guide di piano di tipo SQL corrispondono alle query eseguite nel contesto di batch e istruzioni Transact-SQL autonome che non fanno parte di un oggetto di database. Le guide di piano basate su SQL possono inoltre essere utilizzate per query con parametrizzazioni specifiche.
  • Le guide di piano di tipo TEMPLATE corrispondono alle query autonome con parametrizzazioni specifiche. Tali guide di piano vengono utilizzate per sostituire l'opzione SET di database PARAMETERIZATION di un database per una classe di query.

[!NOTA] Sebbene sia possibile utilizzare le guide di piano solo in SQL Server 2005 Standard, Developer, Evaluation ed Enterprise Edition, la visualizzazione è possibile in tutte le versioni. È inoltre possibile collegare un database che contiene guide di piano a qualsiasi edizione. Quando si ripristina o collega un database a una versione aggiornata di SQL Server 2005, le guide di piano non vengono modificate. Dopo l'esecuzione di un aggiornamento del server è opportuno verificare l'effettiva necessità delle guide di piano di ogni database.

Per guide di piano basate su SQL o su modelli che specificano @type = N'SQL' o @type = N'TEMPLATE' nell'istruzione sp_create_plan_guide, SQL Server fa corrispondere i valori per gli argomenti @module_or_batch e @params a una query confrontando i due valori carattere per carattere. Per questo motivo è necessario immettere il testo esattamente come SQL Server lo riceve nel batch. Per acquisire il testo effettivo del batch è possibile utilizzare SQL Server Profiler. È in genere consigliabile testare le guide di piano utilizzando SQL Server Profiler per verificare che la query venga fatta corrispondere alla guida di piano. L'esecuzione di test su guide di piano basate su SQL o su modelli mediante l'esecuzione di batch da SQL Server Management Studio può produrre risultati imprevisti. Per ulteriori informazioni, vedere Utilizzo di SQL Server Profiler per creare e testare guide di piano.

[!NOTA] Il batch che contiene l'istruzione sulla quale si desidera creare una guida di piano non può contenere un'istruzione USE database.

Se @type = 'SQL' e @module\_or\_batch è impostato su NULL, il valore di @module\_or\_batch viene impostato sul valore di @stmt. Ciò significa che il valore di statement_text deve essere fornito esattamente nello stesso formato inviato a SQL Server, carattere per carattere. Per semplificare questa corrispondenza, non viene eseguita alcuna conversione interna.

Le guide di piano sono definite a livello di ambito del database in cui vengono create. È possibile far corrispondere alla query solo le guide di piano che esistono nel database corrente al momento dell'esecuzione della query. Ad esempio, se AdventureWorks è il database corrente e viene eseguita la query seguente:

SELECT * FROM Person.Contact

È possibile far corrispondere alla query solo le guide di piano nel database AdventureWorks.

Se tuttavia il database corrente è AdventureWorks e vengono eseguite le istruzioni seguenti:

USE DB1;
GO
SELECT * FROM Person.Contact;

È possibile far corrispondere alla query solo le guide di piano in DB1, perché la query è in esecuzione nel contesto di DB1.

In una guida di piano è possibile utilizzare qualsiasi combinazione di hint per la query validi. Quando una guida di piano corrisponde a una query, la clausola OPTION specificata nella guida di piano viene aggiunta alla query prima che questa venga compilata e ottimizzata. Se una query che corrisponde a una guida di piano contiene già una clausola OPTION, gli hint per la query specificati nella guida di piano sostituiscono quelli della query. Perché una guida di piano possa corrispondere a una query che già contiene una clausola OPTION è tuttavia necessario includere la clausola OPTION della query quando si specifica il testo della query da far corrispondere nell'istruzione sp_create_plan_guide. Se si desidera che gli hint specificati nella guida di piano vengano aggiunti agli hint già esistenti nella query, invece di sostituirli è necessario specificare sia gli hint originali che gli hint aggiuntivi nella clausola OPTION della guida di piano.

Il numero totale di guide di piano che è possibile creare è limitato solo dalle risorse di sistema disponibili. È comunque consigliabile utilizzare le guide di piano solo se necessario, per le sole query di cui si desidera migliorare o stabilizzare le prestazioni. Le guide di piano non vanno utilizzate per modificare la maggior parte del carico di query di un'applicazione distribuita. In particolare, le guide di piano che applicano l'hint per la query USE PLAN applicano un piano fisso per la query di destinazione. Query Optimizer non è più in grado pertanto di adattare il piano per la query alle modifiche apportate a statistiche e indici.

Quando si prendono in considerazione le guide di piano che utilizzano la query USE PLAN, confrontare i vantaggi dell'applicazione di un piano fisso all'impossibilità di adattare automaticamente il piano alle modifiche apportate alla distribuzione dei dati e degli indici disponibili.

È consigliabile valutare nuovamente e testare le definizioni delle guide di piano quando si aggiorna l'applicazione a una nuova versione di SQL Server. I requisiti di ottimizzazione delle prestazioni e la funzionalità di individuazione delle corrispondenze delle guide di piano possono cambiare.

Effetto delle guide di piano sulla cache dei piani

La creazione di una guida di piano in un modulo rimuove il piano di query per tale modulo dalla cache dei piani. La creazione di una guida di piano di tipo OBJECT o SQL in un batch rimuove il piano di query per un batch che ha lo stesso valore hash. La creazione di una guida di piano di tipo TEMPLATE rimuove tutti i batch a singola istruzione dalla cache dei piani all'interno del database.

Per creare una guida di piano

Per disattivare, riattivare o eliminare guide di piano

Per ottenere informazioni sulle guide di piano presenti nel database corrente

Vedere anche

Concetti

Ottimizzazione delle query nelle applicazioni distribuite tramite le guide di piano

Altre risorse

Prestazioni delle query

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

15 settembre 2007

Contenuto aggiornato:
  • Chiarimento dei requisiti di corrispondenza delle guide di piano per statement_text quando @type = 'SQL' e @module_or_batch è impostato su NULL.
  • Sono state aggiunte informazioni sull'effetto della creazione di guide di piano sulla cache dei piani.