Miglioramenti apportati alla scalabilità e alle prestazioni (Motore di database)
I miglioramenti apportati alla scalabilità e alle prestazioni nel Motore di database includono statistiche e indici filtrati, nuovi hint di tabella e per la query e nuove funzionalità di elaborazione e relative alla prestazioni di esecuzione delle query.
Statistiche e indici filtrati
In SQL Server 2008 è possibile utilizzare un predicato per creare statistiche e indici filtrati in un subset di righe della tabella, mentre nelle versioni precedenti di SQL Server gli indici e le statistiche vengono creati in tutte le righe della tabella. Gli indici e le statistiche filtrati risultano particolarmente adatti per le query che eseguono la selezione da subset ben definiti di dati, ad esempio colonne con la maggior parte di valori NULL, colonne con categorie eterogenee di valori e colonne con intervalli di valori distinti.
Se confrontato con indici di tabella completa, un indice filtrato progettato correttamente consente di migliorare le prestazioni di esecuzione delle query e di ridurre i costi di manutenzione e di archiviazione dell'indice stesso. Per ulteriori informazioni, vedere Linee guida per la progettazione di indici filtrati. Le statistiche filtrate possono migliorare la qualità del piano di query poiché coprono solo le righe presenti nell'indice filtrato. Il Motore di database crea e gestisce automaticamente statistiche filtrate per gli indici filtrati. È possibile inoltre creare statistiche filtrate in una colonna non indicizzata per migliorare la qualità del piano di query per subset di dati per cui non è necessario utilizzare un indice filtrato. Per ulteriori informazioni, vedereUtilizzo di statistiche per migliorare le prestazioni di esecuzione delle query.
Hint di tabella e per la query
Inclusione del valore di variabile UNKNOWN nell'opzione dell'hint per la query OPTIMIZE FOR
L'opzione dell'hint per la query OPTIMIZE FOR è stata migliorata con l'aggiunta della sintassi UNKNOWN, che indica al Motore di database di utilizzare dati statistici per determinare i valori per una o più variabili locali durante l'ottimizzazione della query anziché i valori iniziali. La sintassi può essere specificata per tutte le variabili locali in una query o per una o più variabili denominate. Per ulteriori informazioni, vedere Hint per la query (Transact-SQL).
Hint per la query
Gli hint di tabella possono ora essere specificati come hint per la query per fornire opzioni avanzate di ottimizzazione delle prestazioni di esecuzione delle query. È consigliabile utilizzare un hint di tabella come hint per la query solo nel contesto di una guida di piano. Per ulteriori informazioni, vedere Hint per la query (Transact-SQL) e Utilizzo degli hint per le query INDEX e FORCESEEK nelle guide di piano.
Hint di tabella
L'hint di tabella FORCESEEK è stato aggiunto per fornire opzioni avanzate di ottimizzazione delle prestazioni di esecuzione delle query. L'hint specifica che Query Optimizer deve utilizzare solo un'operazione Index Seek come percorso di accesso ai dati della tabella o della vista cui si fa riferimento nella query. Per ulteriori informazioni, vedere Utilizzo dell'hint di tabella FORCESEEK.
Prestazioni ed elaborazione delle query
Opzione di escalation blocchi
Una nuova opzione LOCK_ESCALATION di ALTER TABLE consente di disabilitare l'escalation blocchi in una tabella. Nelle tabelle partizionate è possibile configurare blocchi per eseguire l'escalation alle partizioni anziché all'intera tabella. Questa opzione consente di migliorare la concorrenza riducendo la contesa tra blocchi quando si utilizzano tabelle partizionate. Per ulteriori informazioni, vedere ALTER TABLE (Transact-SQL).
Applicazione di filtri bitmap ottimizzati
Query Optimizer può posizionare dinamicamente filtri bitmap in piani di query paralleli per migliorare le prestazioni di esecuzione delle query rispetto a uno schema star. L'applicazione di filtri bitmap ottimizzati può migliorare significativamente le prestazioni di esecuzione delle query su data warehouse rimuovendo le righe non risultanti dalla tabella dei fatti all'inizio del piano di query. Per ulteriori informazioni, vedere Ottimizzazione delle prestazioni di esecuzione delle query del data warehouse tramite l'applicazione di filtri bitmap.
Elaborazione di query parallele su oggetti partizionati
SQL Server 2008 consente di migliorare le prestazioni di esecuzione delle query su tabelle partizionate per molti piani paralleli, di modificare le modalità di rappresentazione dei piani seriali e paralleli, nonché di ottimizzare le informazioni relative al partizionamento fornite nei piani di esecuzione sia in fase di compilazione che di esecuzione. SQL Server 2008 consente inoltre di automatizzare e di migliorare la strategia di partizionamento dei thread per i piani paralleli di esecuzione delle query su oggetti partizionati. Per ulteriori informazioni, vedere Miglioramenti apportati all'elaborazione di query su tabelle e indici partizionati.
Guide di piano
La stored procedure sp_create_plan_guide è stata estesa per accettare l'output di Showplan XML direttamente nel parametro @hints anziché incorporarlo nell'hint USE PLAN. In questo modo viene semplificato il processo di applicazione di un piano di query fisso come hint della guida di piano. La nuova stored procedure sp_create_plan_guide_from_handle consente inoltre di creare una o più guide di piano da un piano di query nella cache dei piani.
Sebbene sia possibile creare più guide di piano OBJECT o SQL per la stessa query e per lo stesso batch o modulo, solo una di tali guide può essere abilitata in un momento specifico.
La nuova funzione di sistema sys.fn_validate_plan_guide può essere utilizzata per convalidare una guida di piano. Le guide di piano possono diventare non valide dopo che sono state apportate modifiche, ad esempio l'eliminazione di un indice, alla progettazione fisica del database. Convalidando una guida di piano è possibile determinare se la guida può essere utilizzata da Query Optimizer senza che sia stata modificata.
Nuove classi di evento, Plan Guide Successful e Plan Guide Unsuccessful, semplificano la verifica relativa all'utilizzo delle guide di piano in Query Optimizer. Quando in SQL Server non è possibile creare un piano di esecuzione per una query che contiene una guida di piano, la query viene compilata automaticamente senza utilizzare la guida. La classe di evento Plan Guide Unsuccessful viene generata quando la compilazione della guida di piano iniziale non riesce.
Nuovi contatori disponibili in Oggetto SQL Statistics di SQL Server, Esecuzioni piani guidate al secondo ed Esecuzioni piani non guidate al secondo, possono essere utilizzati per controllare il numero di esecuzioni del piano in cui il piano di query è stato generato correttamente o non correttamente tramite una guida di piano.
Operazioni quali la creazione, l'eliminazione, l'abilitazione, la disabilitazione o la creazione di script per le guide di piano possono essere eseguite tramite SQL Server Management Studio. Le guida di piano vengono visualizzate nella cartella Programmabilità in Esplora oggetti.
Valori hash per l'individuazione e l'ottimizzazione di query analoghe
Quando si esegue la ricerca di query che utilizzano un numero elevato di risorse, è necessario considerare il modo in cui ricercare e ottimizzare query analoghe che singolarmente utilizzano un numero minimo di risorse di sistema, mentre collettivamente ne utilizzano un numero significativo. Le viste di catalogo sys.dm_exec_query_stats e sys.dm_exec_requests forniscono valori hash della query e del piano di query che è possibile utilizzare per determinare l'utilizzo delle risorse aggregate per query e piani di esecuzione di query analoghi. Per ulteriori informazioni, vedere Ricerca e ottimizzazione di query analoghe tramite valori hash della query e del piano di query.