Condividi tramite


Informazioni sull'utilizzo forzato di piani

Data aggiornamento: 15 settembre 2007

In SQL Server 2005 è stato introdotto l'hint per la query USE PLAN, che consente di forzare l'utilizzo di un piano di query specifico per una query in Query Optimizer. L'hint per la query USE PLAN accetta il piano di query da utilizzare in formato XML come un argomento ed è possibile utilizzarlo per le query con piani che rallentano i tempi di esecuzione ma per le quali si è certi che esistono piani migliori. Uno scenario comune è rappresentato da query che vengono eseguite correttamente in una versione precedente di SQL Server, ma che hanno prestazioni nettamente inferiori in una versione aggiornata indipendentemente dal fatto che si tratti di un Service Pack o di un aggiornamento completo. Nella maggior parte dei casi, l'aggiornamento assicura prestazioni dello stesso livello o migliori per i tempi di esecuzione delle query, tuttavia si possono verificare eccezioni. L'hint per la query USE PLAN è in grado di gestire le situazioni in cui è consigliabile utilizzare un piano selezionato da Query Optimizer in una versione precedente del prodotto anziché un piano selezionato dopo l'aggiornamento.

È possibile utilizzare l'hint per la query USE PLAN con le guide di piano durante la risoluzione dei problemi relativi alle query con prestazioni non ottimali nelle applicazioni distribuite. Le guide di piano consentono di applicare gli hint alle query quando non è possibile o non si desidera modificare direttamente l'applicazione. Per ulteriori informazioni sulle guide di piano, vedere Ottimizzazione delle query nelle applicazioni distribuite tramite le guide di piano. Per scenari più dettagliati relativi all'applicazione dell'hint per la query USE PLAN nelle guide di piano, vedere Scenario di utilizzo forzato del piano: Creazione di una guida di piano che utilizza un hint per la query USE PLAN e Scenario di utilizzo forzato del piano: Creazione di una guida di piano per forzare l'utilizzo di un piano ottenuto da una query riformulata.

È possibile forzare l'utilizzo dei piani nella maggior parte delle query SELECT, incluse le query su tabelle, su indici cluster e non cluster, su viste indicizzate e su tabelle e indici partizionati. Non è possibile specificare l'hint per la query USE PLAN con le istruzioni INSERT, UPDATE o DELETE.

I piani di query generati con l'hint per la query USE PLAN vengono memorizzati nella cache come gli altri piani di query.

Limitazioni per l'utilizzo forzato dei piani

L'utilizzo forzato dei piani impone l'utilizzo di un singolo piano di esecuzione statico per una query. Impedisce inoltre a Query Optimizer di eseguire i necessari adattamenti per le dimensioni dei dati e le distribuzioni soggette a modifiche, i nuovi indici e le altre variabili. Se non viene applicato correttamente, l'utilizzo forzato dei piani può pertanto causare problemi di prestazioni e deve essere utilizzato solo dopo aver valutato tutte le altre opzioni disponibili per migliorare le prestazioni delle query, ad esempio l'utilizzo di statistiche aggiornate e precise e di indici ottimali. È consigliabile che venga utilizzato solo se necessario e solo da amministratori di database e sviluppatori esperti, che siano a conoscenza dei problemi correlati alle prestazioni e della mutabilità degli ambienti dei database e delle applicazioni.

Se l'hint per la query USE PLAN ha effetti sulla compilazione di una query in un'applicazione distribuita, è consigliabile specificarlo in una guida di piano anziché incorporarlo direttamente nell'applicazione. In questo modo, si ottengono i vantaggi seguenti:

  • È possibile modificare o rimuovere l'hint senza che sia necessario modificare o ricompilare l'applicazione. In alcuni casi, è possibile che l'hint USE PLAN applicabile in una versione di SQL Server non possa essere utilizzato in un Service Pack o in una versione futura. Potrebbe pertanto essere necessario modificarlo o rimuoverlo dopo che l'applicazione è stata distribuita.
  • È possibile evitare di utilizzare un hint di grandi dimensioni direttamente nella query, in modo da migliorarne la leggibilità.
    ms186343.note(it-it,SQL.90).gifImportante:
    Quando si crea una guida del piano che utilizza USE PLAN, è consigliabile verificare durante i test se la query corrispondente al piano che si desidera forzare viene in genere inviata con la richiesta di un cursore. I piani per le query basate su cursori sono diversi dai piani per le query non basate su cursori. Per creare una guida del piano che specifica un hint USE PLAN applicabile a una query inviata con la richiesta di un cursore è pertanto necessario specificare un piano di cursore. Per ulteriori informazioni, vedere Utilizzo dell'hint USE PLAN nelle query con cursori.

In SQL Server 2005, l'utilizzo forzato dei piani non è supportato per i tipi di query seguenti:

  • Query con cursori dinamici, cursori gestiti da keyset e cursori forward only. I cursori statici e fast forward-only sono supportati. Per ulteriori informazioni, vedere Utilizzo dell'hint USE PLAN nelle query con cursori.
  • Query distribuite.
  • Query full-text.
  • Istruzioni di inserimento, eliminazione e aggiornamento.

Vedere anche

Concetti

Definizione dei piani di query tramite l'utilizzo forzato

Altre risorse

Prestazioni delle query

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

15 settembre 2007

Contenuto modificato:
  • È stata corretta una definizione non precisa secondo la quale i piani di query generati con USE PLAN non vengono memorizzati nella cache se la stringa letterale risultante ha una lunghezza superiore a 8 KB.