Limitazione della durata dell'ottimizzazione e del numero di eventi
È possibile controllare le sessioni di Ottimizzazione guidata motore di database limitando la durata dell'ottimizzazione o il numero di eventi ottimizzati dall'applicazione. La limitazione dell'analisi per l'ottimizzazione è utile quando è necessario ottimizzare un server di produzione durante una sessione di manutenzione. La limitazione del numero di eventi ottimizzati è utile quando si desidera confrontare due configurazioni ipotetiche ottimizzando lo stesso carico di lavoro per ognuna.
È possibile che tramite Ottimizzazione guidata motore di database non vengano ottimizzati tutti gli eventi di un carico di lavoro per qualsiasi configurazione specifica. Specificando il numero di eventi da ottimizzare, è possibile fare in modo che la sessione di ottimizzazione per ogni configurazione presupponga lo stesso numero di eventi ottimizzabili, affinché i risultati siano confrontabili più agevolmente.
Controllo della durata dell'ottimizzazione
Tramite Ottimizzazione guidata motore di database viene analizzato un carico di lavoro per individuare il miglior set di strutture di prestazioni fisiche possibile per i database specificati. La quantità di tempo necessaria dipende dalla lunghezza del carico di lavoro. Ottimizzazione guidata motore di database potrebbe richiedere diversi giorni per completare un'analisi completa di un carico di lavoro contenente centinaia di eventi. Benché durante l'analisi i database siano comunque disponibili, le prestazioni potrebbero risentirne.
Per controllare la durata dell'analisi di un carico di lavoro da parte di Ottimizzazione guidata motore di database, impostare il tempo massimo. Il tempo massimo è il numero di ore e minuti che si desidera vengano impiegati da Ottimizzazione guidata motore di database per l'analisi di un carico di lavoro. Il risultato dell'impostazione di un tempo massimo è un'indicazione basata sulla migliore soluzione ottenibile tramite Ottimizzazione guidata motore di database prima dello scadere del tempo.
Nell'interfaccia utente grafica (GUI) di Ottimizzazione guidata motore di database questo parametro è impostato su 1 ora per impostazione predefinita. Nell'utilità da riga di comando dta il limite predefinito è impostato su 8 ore. Se per l'analisi completa è necessaria una quantità di tempo minore rispetto al limite impostato, l'ottimizzazione verrà interrotta non appena completata. È possibile specificare un tempo di ottimizzazione illimitato per generare l'indicazione migliore possibile nelle interfacce di entrambi gli strumenti.
Nelle sottosezioni seguenti viene illustrata l'impostazione di questa opzione di ottimizzazione nella GUI e al prompt dei comandi.
Impostazione del tempo di ottimizzazione nell'interfaccia utente grafica
Per impostare il limite di tempo per l'ottimizzazione nella GUI di Ottimizzazione guidata motore di database, selezionare Limita tempo di ottimizzazione nella scheda Opzioni di ottimizzazione e quindi impostare la data e l'ora in Data e ora interruzione.
Si applicano le indicazioni seguenti:
In generale, quando si specifica un tempo di ottimizzazione maggiore, si ottengono risultati complessivi migliori, in quanto viene analizzata una parte maggiore del carico di lavoro. In questo caso, le indicazioni si basano su informazioni più complete.
Per impostazione predefinita, il tempo di ottimizzazione massimo è impostato su 1 ora.
Per specificare un tempo di ottimizzazione illimitato, deselezionare la casella di controllo Limita tempo di ottimizzazione.
Impostazione del tempo di ottimizzazione nell'utilità da riga di comando dta
È possibile impostare il limite di tempo per l'ottimizzazione tramite l'utilità da riga di comando dta specificando un valore per l'argomento -A. Esaminare, ad esempio, il comando dta seguente:
dta -E -s MySession -D AdventureWorks -if MyWorkloadScript.sql -fa IDX -A 120
dove -E specifica una connessione trusted, -D specifica il database da ottimizzare, -if specifica il file del carico di lavoro, -fa IDX indica che Ottimizzazione guidata motore di database deve prevedere solo l'aggiunta di indici nelle indicazioni e -A 120 indica che l'ottimizzazione deve essere completata entro 120 minuti.
Quando si esegue l'utilità dta al prompt dei comandi, anziché chiamare l'utilità in uno script per l'ottimizzazione automatica, premere CTRL+C per interrompere l'ottimizzazione. Tramite Ottimizzazione guidata motore di database verrà generata l'indicazione migliore possibile in base alla quantità di carico di lavoro utilizzata fino al momento specifico.
Si applicano le indicazioni seguenti:
In generale, quando si specifica un tempo di ottimizzazione maggiore, si ottengono risultati complessivi migliori, in quanto viene analizzata una parte maggiore del carico di lavoro. In questo caso, le indicazioni si basano su informazioni più complete.
Per specificare un'ottimizzazione con una quantità di tempo illimitata, utilizzare l'argomento da riga di comando –A 0. Utilizzare questo argomento per ottenere l'indicazione migliore per tutto il carico di lavoro.
Se l'opzione –A non è specificata, viene impostato il valore predefinito –A 480 (tempo di ottimizzazione di 8 ore).
Anche se si preme CTRL+C, è possibile che l'utilità dta richieda qualche momento per popolare i report di analisi prima dell'interruzione.
Impostazione del tempo di ottimizzazione nel file di input XML
È anche possibile impostare un limite di tempo massimo per l'ottimizzazione nel file di input XML che può essere utilizzato con l'utilità da riga di comando dta. Per specificare un limite di tempo in minuti nel file di input XML, utilizzare il sottoelemento TuningTimeInMin dell'elemento padre TuningOptions. Per ulteriori informazioni sul file di input XML, vedere Guida di riferimento ai file di input XML (Ottimizzazione guidata motore di database).
Controllo del numero di eventi da ottimizzare
È possibile controllare il numero di eventi inclusi nei carichi di lavoro ottimizzati tramite Ottimizzazione guidata motore di database. Questa opzione è disponibile solo nell'utilità da riga di comando dta utilizzando l'argomento –n. Il funzionamento dell'utilità dta quando viene utilizzato l'argomento -n dipende dal valore specificato per l'argomento -A, che consente di indicare il limite di tempo per l'ottimizzazione, nel modo seguente:
L'utilità dta viene interrotta automaticamente dopo avere ottimizzato il numero di eventi specificato o allo scadere del limite di tempo indicato, a seconda di quale delle due condizioni si verifichi per prima. Se l'argomento -n non viene specificato, per impostazione predefinita l'utilità dta ottimizzerà tutti gli eventi del carico di lavoro. Se l'argomento -A non viene specificato, per impostazione predefinita l'utilità dta presuppone un limite di tempo di 8 ore.
Per assicurarsi che il numero di eventi specificato con l'argomento -n venga ottimizzato, impostare inoltre 0 per l'argomento -A, che consente di definire un tempo di ottimizzazione illimitato. Ad esempio, -n 250 -A 0.
Specifica del numero di eventi da ottimizzare nel file di input XML
È anche possibile specificare un numero di eventi da ottimizzare nel file di input XML che può essere utilizzato con l'utilità da riga di comando dta. Per specificare un numero di eventi nel file di input XML, utilizzare il sottoelemento NumberOfEvents dell'elemento padre TuningOptions. Per ulteriori informazioni sul file di input XML, vedere Guida di riferimento ai file di input XML (Ottimizzazione guidata motore di database).
Procedure consigliate per la limitazione del tempo e del numero di eventi ottimizzati
Di seguito vengono fornite alcune indicazioni per limitare il tempo e il numero di eventi ottimizzati:
Per carichi di lavoro ridotti o con singola query (quantità di eventi minore di 100), specificare un tempo di ottimizzazione illimitato. Un tempo di ottimizzazione illimitato consente di ottenere le indicazioni migliori da Ottimizzazione guidata motore di database e, nella maggior parte dei casi, di completare l'ottimizzazione in una quantità di tempo relativamente breve.
Per carichi di lavoro di dimensioni elevate (oltre 100 eventi), valutare le opzioni seguenti nell'ordine in cui vengono presentate. Ricorrere all'ultima opzione solo dopo avere considerato le prime tre.
Se l'utente è soggetto a un vincolo di tempo, limitare il tempo di ottimizzazione.
Se è sufficiente ottimizzare un numero fisso di eventi, se ad esempio i primi 10.000 eventi potrebbero essere rappresentativi del restante carico di lavoro, utilizzare l'utilità da riga di comando dta e specificare il numero di eventi tramite l'argomento –n.
Se si utilizza l'utilità da riga di comando dta e si desidera limitare ulteriormente il tempo di ottimizzazione, è possibile utilizzare sia l'argomento –A che l'argomento –n. Se si specifica, ad esempio, -A 240 e –n 1000, l'ottimizzazione guidata motore di database verrà interrotta non appena sono stati ottimizzati 1000 eventi o allo scadere della quarta ora, a seconda di quale delle due condizioni si verifichi per prima.
Il tempo impiegato per l'ottimizzazione dipende dalla complessità delle query (numero di tabelle cui viene fatto riferimento), dai set di funzionalità scelti (l'ottimizzazione delle viste indicizzate richiede una maggiore quantità di tempo rispetto all'ottimizzazione degli indici) e dalle dimensioni dei dati (per la creazione di statistiche). In genere, la maggior parte del tempo dedicato da Ottimizzazione guidata motore di database all'ottimizzazione viene utilizzata per eseguire chiamate a Query Optimizer. Di seguito viene indicata una semplice regola pratica per determinare il tempo appropriato da assegnare a Ottimizzazione guidata motore di database per l'ottimizzazione:
Per query semplici che fanno riferimento a un massimo di tre tabelle, prevedere circa 1 secondo per query per ottimizzare solo indici e circa 10 secondi per query per ottimizzare indici e viste indicizzate. Per query complesse che fanno riferimento a un massimo di tre tabelle, prevedere circa 10 secondi per query per ottimizzare solo indici e circa 100 secondi per query per ottimizzare indici e viste indicizzate.
Se Ottimizzazione guidata motore di database indica che è stato utilizzato il 100% del carico di lavoro, significa che tutto il carico di lavoro è stato analizzato, ma non necessariamente ottimizzato. Per determinare se è stato ottimizzato tutto il carico di lavoro, cercare il messaggio seguente al termine del log di ottimizzazione:
All events in the workload were not tuned. Consider increasing time bound or specify number of events to be considered in the input XML.
Se nel log di ottimizzazione è presente un messaggio di questo tipo, tramite Ottimizzazione guidata motore di database non è stato possibile ottimizzare tutto il carico di lavoro. Per risolvere questo problema, specificare un tempo di ottimizzazione maggiore. Per garantire che tutti gli eventi del carico di lavoro vengano ottimizzati, è possibile specificare un tempo di ottimizzazione illimitato. Se si sceglie di non specificare un tempo di ottimizzazione illimitato, Ottimizzazione guidata motore di database tenterà di ottimizzare il maggior numero di eventi possibile entro il tempo di ottimizzazione impostato.
Nota Non esiste alcun mapping diretto tra le modalità Veloce, Media o Completa di Ottimizzazione guidata indici di MicrosoftSQL Server 2000 e gli argomenti –A e –n in Ottimizzazione guidata motore di database. In generale, se l'ottimizzazione in una modalità specifica (Veloce, Media o Completa) in SQL Server 2000 ha richiesto una certa quantità di tempo, la stessa quantità di tempo garantisce indicazioni simili o migliori in Ottimizzazione guidata motore di database SQL Server 2005. È consigliabile che gli utenti della modalità Completa utilizzino Ottimizzazione guidata motore di database con un tempo di ottimizzazione illimitato e un numero illimitato di eventi da ottimizzare nel carico di lavoro.
Altri metodi di limitazione della durata dell'ottimizzazione
Oltre a limitare il tempo di esecuzione di Ottimizzazione guidata motore di database, è possibile scegliere di ottimizzare solo un subset delle tabelle del database.
Sono inoltre disponibili le opzioni seguenti:
Mantieni tutte le strutture di progettazione fisica esistenti
Mantieni solo gli indici
Mantieni solo gli indici cluster
Ottimizzazione guidata motore di database include nell'indicazione finale eventuali hint per gli indici o hint per le query, anche se l'indice non è ottimale per la tabella. È possibile che vengano proposti e indicati indici di altre tabelle a cui si fa riferimento nella query. Tutti gli indici specificati come hint, tuttavia, faranno sempre parte dell'indicazione finale. Gli hint possono impedire la scelta di un piano di esecuzione migliore da parte di Ottimizzazione guidata motore di database. Valutare l'opportunità di rimuovere dalle query gli eventuali hint per gli indici prima dell'analisi del carico di lavoro.