Differenze tra Ottimizzazione guidata motore di database e Ottimizzazione guidata indici

Oltre a consentire la gestione delle nuove caratteristiche del database di SQL Server, Ottimizzazione guidata motore di database presenta funzionalità diverse rispetto a Ottimizzazione guidata indici di Microsoft SQL Server 2000 . Sebbene entrambi gli strumenti dispongano di un'interfaccia utente grafica (GUI) e di un'interfaccia del prompt dei comandi, gli utenti che conoscono già Ottimizzazione guidata indici devono tenere conto delle modifiche seguenti.

Per un elenco completo delle nuove caratteristiche di Ottimizzazione guidata motore di database, vedere Funzionalità dell'Ottimizzazione guidata motore di database.

Autorizzazioni necessarie per l'ottimizzazione dei database

In SQL Server 2000 solo i membri del ruolo predefinito del server sysadmin possono utilizzare Ottimizzazione guidata indici per ottimizzare i database. In SQL Server i membri del ruolo sysadmin possono continuare a ottimizzare i database utilizzando Ottimizzazione guidata motore di database, ma ora gli anche utenti che sono membri del ruolo predefinito del database db_owner possono ottimizzare i database di cui sono proprietari.

Nota

Quando viene utilizzato per la prima volta, è necessario che Ottimizzazione guidata motore di database venga avviato da un utente dotato delle autorizzazioni di amministratore di sistema per l'inizializzazione dell'applicazione. Dopo l'inizializzazione, sia i membri del ruolo predefinito del server sysadmin che i membri del ruolo predefinito del database db_owner possono utilizzare Ottimizzazione guidata motore di database per ottimizzare i database. È tuttavia importante tenere presente che i membri del ruolo db_owner possono ottimizzare solo i database di cui sono proprietari. Per ulteriori informazioni, vedere Inizializzazione di Ottimizzazione guidata motore di database.

Contesto del carico di lavoro

Ottimizzazione guidata indici valuta ogni istruzione del carico di lavoro utilizzando il database selezionato per l'ottimizzazione, a prescindere dal fatto che l'istruzione sia stata originariamente eseguita nel contesto di tale database. Ottimizzazione guidata indici consente di ottimizzare un solo database durante ogni sessione di ottimizzazione. Ottimizzazione guidata motore di database consente di ottimizzare più database durante una sessione di ottimizzazione. Ottimizzazione guidata motore di database utilizza le informazioni dello script per determinare in quale database viene eseguita l'istruzione e la valuta sulla base di quel database. I database selezionati per l'ottimizzazione non influiscono sul modo in cui vengono valutate le istruzioni.

Ad esempio:

  • Il database AdventureWorks2008R2 contiene una tabella Person.Person con le colonne FirstName e LastName.

  • Il carico di lavoro TuneQuery.sql contiene la query seguente:

    SELECT FirstName, LastName
    FROM Person.Person
    WHERE LastName = 'Abercrombie';
    GO
    
  • User1 si connette al database MyDB per impostazione predefinita.

In SQL Server 2000 User1 esegue il comando seguente dalla riga di comando o si attiene a una procedura analoga utilizzando la GUI di Ottimizzazione guidata indici:

Itwiz -D AdventureWorks2008R2 -I TuneQuery.sql –o rec.sql –U <username> –P <password>

Questo approccio funziona perché ogni istruzione di TuneQuery.sql viene analizzata sulla base del database AdventureWorks2008R2 in quanto è specificato nella riga di comando (-D AventureWorks2008R2). TuneQuery.sql è valido nel database AdventureWorks2008R2 e l'ottimizzazione viene eseguita senza problemi.

Utilizzando Ottimizzazione guidata motore di database, la sintassi della riga di comando è:

dta -s Session1 –D AdventureWorks2008R2 –if TuneQuery.sql –of rec.sql –U username –P password

Poiché User1 si connette al database MyDB per impostazione predefinita, nel sistema il contesto del database viene impostato su MyDB. L'istruzione Transact-SQL viene quindi analizzata sulla base del database MyDB, anziché del database AdventureWorks2008R2. L'istruzione non è valida in MyDB e quindi viene ignorata.

Questo funzionamento può essere spiegato nel modo seguente. Se User1 esegue TuneQuery.sql utilizzando sqlcmd o SQL Server Management Studio senza specificare un database di destinazione, TuneQuery.sql viene eseguito su MyDB e l'operazione genera un errore. Ottimizzazione guidata motore di database simula lo stesso comportamento.

Per risolvere questo problema, Aggiungere un'istruzione USE <database> allo script TuneQuery.sql, come indicato di seguito:

USE AdventureWorks2008R2;
GO
SELECT FirstName, LastName
FROM Person.Person
WHERE LastName = 'Abercrombie';
GO

Ottimizzazione guidata motore di database rileva innanzitutto l'istruzione USE AdventureWorks2008R2 e utilizza quelle informazioni per impostare il database corrente su AdventureWorks2008R2. Quando successivamente rileva l'istruzione SELECT FirstName, LastName FROM Person.Person WHERE LastName = 'Abercrombie', la analizza sulla base di AdventureWorks2008R2 perché il contesto del database corrente è AdventureWorks2008R2. In questo modo Ottimizzazione guidata motore di database è in grado di ottimizzare correttamente il database. Si noti che se lo script precedente viene eseguito utilizzando sqlcmd o SQL Server Management Studio, l'istruzione viene eseguita su AdventureWorks2008R2 poiché la prima istruzione USE <database> modifica il contesto del database da MyDB a AdventureWorks2008R2.

È possibile utilizzare le istruzioni USE <database> per specificare il database sul quale deve essere eseguita l'istruzione. In genere, questo non è necessario se ogni istruzione utilizza nomi di tabella completi.

Poiché Ottimizzazione guidata motore di database cerca di individuare il database corrispondente sul quale viene eseguita ogni istruzione al fine di simulare l'ambiente di esecuzione, le informazioni seguenti sono fondamentali per comprendere come vengono trattati i diversi tipi di input.

Carico di lavoro di file/inline SQL

Come accennato nella sezione precedente, Ottimizzazione guidata motore di database utilizza le istruzioni USE <database> che precedono una query Transact-SQL per identificare il database sul quale deve essere eseguita la query. Ottimizzazione guidata motore di database esamina l'input a partire dalla prima istruzione presente nel file script Transact-SQL e considera il database corrente come quello predefinito. La presenza di istruzioni USE <database> modifica il contesto del database corrente sulla base del quale vengono analizzate le istruzioni.

File di traccia e tabelle di traccia

Ottimizzazione guidata motore di database simula la riproduzione di SQL Server Profiler durante la verifica del file di traccia e utilizza le informazioni seguenti ottenute dai file di traccia nell'ordine riportato:

  • Se il file di traccia contiene eventi con la colonna DatabaseName popolata, Ottimizzazione guidata motore di database li utilizza per individuare il database sul quale è stato eseguito l'evento.

  • Se la colonna DatabaseID del file di traccia è popolata, Ottimizzazione guidata motore di database la utilizza per individuare il database sul quale è stato eseguito l'evento ed esegue una query sul catalogo di sistema per ottenere il nome del database corrispondente a DatabaseID.

Nota

Se un database è stato scollegato, collegato, rimosso o creato dopo la raccolta di una traccia, i mapping di DatabaseID e DatabaseName potrebbero subire variazioni rispetto al momento della creazione del file di traccia. Ottimizzazione guidata motore di database non è in grado di rilevare queste informazioni. Se i mapping vengono modificati, è necessario rimuovere completamente DatabaseID dalla traccia per evitare che Ottimizzazione guidata motore di database ottimizzi un database non corretto.

  • Se nella traccia né DatabaseNameDatabaseID sono presenti come colonne, Ottimizzazione guidata motore di database sceglie il database da utilizzare per ogni istruzione in base allo stesso criterio adottato per la scelta degli script Transact-SQL per ogni colonna SPID nel file di traccia. Se la colonna SPID non è presente, la scelta viene eseguita esattamente in base allo stesso criterio adottato per i file script Transact-SQL.

Durante l'analisi di ogni istruzione, Ottimizzazione guidata motore di database utilizza anche le informazioni di accesso, come nella riproduzione di SQL Server Profiler. I database predefiniti del server possono variare a seconda dei valori della colonna LoginName presenti nel file di traccia.

Nota

Se un account di accesso presente nella traccia non è più visibile nel sistema, Ottimizzazione guidata motore di database lo ignora e per impostazione predefinita utilizza quello che attualmente esegue il processo di ottimizzazione. In questo caso viene inserito un messaggio nel log di Ottimizzazione guidata motore di database.

Limiti del tempo di ottimizzazione

Ottimizzazione guidata motore di database consente di specificare un tempo di ottimizzazione o un tempo di ottimizzazione illimitato. Questa caratteristica non è disponibile in Ottimizzazione guidata indici. Per ulteriori informazioni, vedere Limitazione della durata dell'ottimizzazione e del numero di eventi.