Eventi
31 mar, 23 - 2 apr, 23
Il più grande evento di apprendimento di SQL, Infrastruttura e Power BI. 31 marzo - 2 aprile. Usare il codice FABINSIDER per salvare $400.
Registrati oggiQuesto browser non è più supportato.
Esegui l'aggiornamento a Microsoft Edge per sfruttare le funzionalità più recenti, gli aggiornamenti della sicurezza e il supporto tecnico.
Si applica a: SQL Server 2016 (13.x) e versioni successive
Database SQL di Azure
Azure Synapse Analytics
Piattaforma di strumenti analitici (PDW)
Quando si esegue la migrazione da una versione precedente di SQL Server a SQL Server 2014 (12.x) o versioni successive e si aggiorna il livello di compatibilità del database alla versione più recente disponibile, un carico di lavoro può essere esposto al rischio di regressione delle prestazioni. Questo è anche possibile in misura minore durante l'aggiornamento da SQL Server 2014 (12.x) a una nuova versione.
A partire da SQL Server 2014 (12.x) e per tutte le nuove versioni, tutte le modifiche di Query Optimizer sono associate al livello di compatibilità del database più recente, quindi i piani non vengono modificati esattamente nel punto di aggiornamento, ma quando un utente passa dall'opzione di database COMPATIBILITY_LEVEL
alla versione più recente disponibile. Per altre informazioni sulle modifiche a Query Optimizer introdotte in SQL Server 2014 (12.x), vedere Stima della cardinalità. Per altre informazioni sui livelli di compatibilità e sul loro possibile effetto sugli aggiornamenti, vedere Livelli di compatibilità e aggiornamenti del motore di database.
Questa funzionalità di collegamento offerta dal livello di compatibilità del database in combinazione con Query Store offre un livello ottimale di controllo delle prestazioni delle query nel processo di aggiornamento, se l'aggiornamento segue il flusso di lavoro consigliato illustrato di seguito. Per altre informazioni sul flusso di lavoro consigliato per l'aggiornamento del livello di compatibilità, vedere Modificare la modalità di compatibilità del database e usare il Query Store.
Questo controllo sugli aggiornamenti è stato migliorato ulteriormente in SQL Server 2017 (14.x) con l'introduzione di Ottimizzazione automatica e consente di automatizzare l'ultimo passaggio del flusso di lavoro consigliato visualizzato sopra.
A partire da SQL Server Management Studio v18 la nuova funzionalità Assistente ottimizzazione query (QTA, Query Tuning Assistant) assiste gli utenti nel flusso di lavoro consigliato per garantire la stabilità delle prestazioni durante l'aggiornamento alle versioni più recenti di SQL Server, come documentato nella sezione Mantenere la stabilità delle prestazioni durante l'aggiornamento alla nuova versione di SQL Server di Scenari di utilizzo di Query Store. Tuttavia, l'Assistente ottimizzazione query (QTA) non esegue il rollback a un piano valido noto in precedenza, come visto nell'ultimo passaggio del flusso di lavoro consigliato. QTA terrà invece traccia di eventuali regressioni trovate nella vista Query con regresso del Query Store e esplorerà le possibili permutazioni delle varianti del modello di ottimizzazione applicabili così che possa essere creato un piano nuovo e migliore.
Importante
QTA non genera carichi di lavoro utente. Se esegui QTA in un ambiente non utilizzato dalle tue applicazioni, assicurati che sia comunque possibile eseguire un carico di lavoro di test rappresentativo sul motore di database SQL Server di destinazione con altri metodi.
Il punto iniziale di QTA presuppone che un database di una versione precedente di SQL Server venga spostato (tramite CREATE DATABASE ... FOR ATTACH o RESTORE) a una versione più recente del motore di database SQL Server e il livello di compatibilità del database non viene modificato immediatamente prima dell'aggiornamento. QTA guiderà attraverso i seguenti passaggi:
Per altre informazioni sul collegamento di un database, vedere Collegamento e scollegamento di database.
Vedi di seguito come l'Assistente ottimizzazione query modifica solo gli ultimi passaggi del flusso di lavoro consigliato per aggiornare, utilizzando Query Store, il livello di compatibilità illustrato sopra. Invece di offrire la possibilità di scegliere tra il piano di esecuzione attualmente inefficiente e l'ultimo piano di esecuzione noto come buono, l'Assistente ottimizzazione query offre opzioni di ottimizzazione specifiche per le query regredite selezionate, affinché si crei un nuovo stato migliorato con piani di esecuzione ottimizzati.
QTA prende in esame solo le query SELECT
che possono essere eseguite da Query Store. Le query con parametri sono idonee se il parametro compilato è noto. Le query che dipendono da costrutti di runtime, ad esempio tabelle temporanee o variabili di tabella, non sono idonee in questa fase.
L'Assistente ottimizzazione query si concentra sui modelli noti di regressione delle query derivanti da modifiche alle versioni del Calcolatore di Cardinalità (CE, Cardinality Estimator). Ad esempio, quando si aggiorna un database da SQL Server 2012 (11.x) e livello di compatibilità 110 a SQL Server 2017 (14.x) e livello di compatibilità 140, alcune query potrebbero subire una regressione, poiché sono state progettate specificamente per funzionare con la versione CE (Cardinality Estimation) presente in SQL Server 2012 (11.x) (CE 70). Ciò non significa che il ripristino da Stima della cardinalità 140 a Stima della cardinalità 70 sia l'unica opzione. Se la regressione è originata da una sola modifica specifica nella versione più recente, è possibile suggerire che la query usi solo la parte rilevante della versione di Stima della cardinalità precedente (che funzionava meglio per la query specifica) pur utilizzando tutti gli altri miglioramenti delle versioni di Stima della cardinalità più recenti. In questo modo sarà possibile consentire alle altre query del carico di lavoro che non hanno regredito di sfruttare i miglioramenti delle versioni più recenti di Stima della cardinalità.
I modelli di stima della cardinalità cercati dal QTA sono i seguenti:
USE HINT ('ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES')
fa sì che SQL Server generi un piano di esecuzione usando una selettività minima quando stima predicati AND
per i filtri per rendere conto della correlazione. Per altre informazioni, vedere Suggerimenti della query USE HINT e Versioni della Stima della Cardinalità.USE HINT ('ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS')
fa sì che SQL Server generi un piano di esecuzione mediante il presupposto Simple Containment (Indipendenza semplice) anziché mediante il presupposto predefinito Base Containment (Indipendenza di base). Per ulteriori informazioni, consultare Suggerimenti per le query con USE HINT e Versioni del Calcolatore di Cardinalità.QUERYTRACEON 9488
viene usato per generare un piano di esecuzione. Per ulteriori informazioni sulle MSTVF, consultare Creare funzioni definite dall'utente (Motore di database).Nota
Come ultima risorsa, se gli hint a scopo limitato non restituiscono risultati soddisfacenti per i modelli di query idonei, viene preso in considerazione anche l'uso completo del CE 70, utilizzando l'hint USE HINT ('FORCE_LEGACY_CARDINALITY_ESTIMATION')
per generare un piano di esecuzione.
Importante
Qualsiasi hint impone determinati comportamenti che potrebbero essere presi in considerazione per gli aggiornamenti futuri di SQL Server. È consigliabile applicare gli hint solo quando non è disponibile nessun'altra opzione e si prevede di rivedere il codice con hint a ogni nuovo aggiornamento. Imponendo i comportamenti è possibile che si impedisca al carico di lavoro di sfruttare i vantaggi dei miglioramenti introdotti nelle versioni più recenti di SQL Server.
QTA è una funzionalità basata sulla sessione che archivia lo stato della sessione nello schema msqta
del database utente dove una sessione viene creata per la prima volta. Nel tempo è possibile creare più sessioni di ottimizzazione per un singolo database, ma per un database specifico può essere presente una sola sessione attiva.
In SQL Server Management Studio aprire Esplora Oggetti e connettersi al Motore di Database.
Per il database di cui si vuole aggiornare il livello di compatibilità, fare clic con il pulsante destro del mouse sul nome del database, selezionare Attività, selezionare Aggiornamento database e selezionare Nuova sessione di aggiornamento database.
Nella finestra della QTA Wizard, sono necessari due passaggi per configurare una sessione:
Nella finestra Configura configurare Query Store per acquisire l'equivalente di un ciclo aziendale completo di dati del carico di lavoro da analizzare e ottimizzare.
Nella finestra Impostazioni due colonne indicano lo stato Corrente di Query Store nel database di destinazione, nonché le impostazioni Consigliate.
Importante
Il valore Dimensioni massime proposto è un valore arbitrario, che può essere adatto a un carico di lavoro di breve durata. Tenere tuttavia presente che questo valore può essere insufficiente per contenere informazioni sui carichi di lavoro baseline e successivi all'aggiornamento del database in caso di carichi di lavoro particolarmente intensi, ad esempio quando è necessario generare più piani diversi. Se si prevede che questo sarà il caso, immettere un valore superiore appropriato.
La finestra Regolazione completa la configurazione della sessione e indica i passaggi successivi per aprire e svolgere la sessione. Al termine, fare clic su Fine.
Per il database di cui si vuole aggiornare il livello di compatibilità, fare clic con il pulsante destro del mouse sul nome del database, selezionare Attività, selezionare Aggiornamento database e selezionare Monitora sessioni.
La pagina Gestione delle sessioni elenca la sessione corrente e le sessioni correnti e precedenti per il database nell'ambito. Selezionare la sessione desiderata e selezionare Dettagli.
Nota
Se la sessione corrente non è presente, selezionare il pulsante Aggiorna.
L'elenco contiene le informazioni seguenti:
Nota
Elimina sessione: elimina tutti i dati archiviati per la sessione selezionata. Tuttavia l'eliminazione di una sessione chiusa non elimina le guide di piano distribuite in precedenza. Se si elimina una sessione che aveva distribuito guide di piano, non è possibile utilizzare QTA per eseguire il rollback. Cercare invece le guide di piano mediante la tabella di sistema sys.plan_guides ed eliminarle manualmente con sp_control_plan_guide.
Il punto di ingresso per una nuova sessione è il passaggio Raccolta dati.
Nota
Il pulsante Sessioni torna ad aprire la pagina Gestione delle sessioni, lasciando invariata la sessione attiva.
Questo passaggio include tre passaggi secondari:
Raccolta di dati baseline richiede all'utente di eseguire il ciclo del carico di lavoro rappresentativo, in modo che Query Store possa raccogliere una baseline. Dopo il completamento del carico di lavoro, selezionare Esecuzione del carico di lavoro completata e selezionare Avanti.
Nota
La finestra QTA può essere chiusa mentre il carico di lavoro è in esecuzione. Se in un secondo momento si torna alla sessione che rimane in stato attivo, questa verrà ripresa dallo stesso passaggio in cui è stata interrotta.
Aggiornamento del database richiederà l'autorizzazione per aggiornare il livello di compatibilità del database al livello desiderato. Per procedere con il passaggio secondario successivo, selezionare Sì.
La pagina seguente conferma che il livello di compatibilità del database è stato aggiornato correttamente.
Raccolta dati osservati richiede all'utente di eseguire nuovamente il ciclo del carico di lavoro rappresentativo, per consentire a Query Store di acquisire una baseline di confronto che verrà usata per la ricerca di opportunità di ottimizzazione. Durante l'esecuzione del carico di lavoro, usare il pulsante Aggiorna per aggiornare l'elenco delle query regredite, se presenti. Modificare il valore Query da mostrare per limitare il numero di query visualizzate. L'ordine dell'elenco è influenzato dalla Metrica (Durata o CpuTime) e dall'Aggregazione (Media è predefinito). Selezionare anche quante Query mostrare. Dopo il completamento del carico di lavoro, selezionare Esecuzione del carico di lavoro completata e selezionare Avanti.
L'elenco contiene le informazioni seguenti:
Visualizzazione analisi consente di selezionare le query per sperimentare e individuare opportunità di ottimizzazione. Il valore Query da mostrare diventa l'ambito delle query idonee per la sperimentazione. Dopo la verifica delle query desiderate, selezionare Avanti per iniziare la sperimentazione.
Nota
Le query con l'impostazione Regolabile = False non possono essere selezionate per la sperimentazione.
Importante
Un messaggio informa che quando QTA passa alla fase di sperimentazione, non sarà possibile tornare alla pagina di Analisi.
Se non si selezionano tutte le query idonee prima di passare alla fase di sperimentazione, sarà necessario creare una nuova sessione in un secondo momento e ripetere il flusso di lavoro. Questo richiede la reimpostazione del livello di compatibilità del database sul valore precedente.
Visualizzazione risultati consente di selezionare le query a cui distribuire l'ottimizzazione proposta come guida di piano.
L'elenco contiene le informazioni seguenti:
Verifica Mostra lo stato di distribuzione delle query selezionate in precedenza per questa sessione. L'elenco in questa pagina differisce da quello nella pagina precedente poiché la colonna Può distribuire è stata modificata in Può eseguire il rollback. Questa colonna può essere True o False a seconda che l'ottimizzazione delle query distribuite possa essere annullata e la guida del piano rimossa.
Se in un secondo momento è necessario eseguire il rollback su un'ottimizzazione proposta, selezionare la query corrispondente e selezionare Rollback. La guida di piano della query viene rimossa e l'elenco viene aggiornato per rimuovere la query di cui è stato eseguito il rollback. Si noti che nell'immagine seguente è stata rimossa la query 8.
Nota
L'eliminazione di una sessione chiusa non elimina le guide di piano distribuite in precedenza. Se si elimina una sessione che aveva distribuito guide di piano, non si può usare QTA per eseguire il rollback. Invece, cerca le guide di piano utilizzando la tabella di sistema sys.plan_guides ed eliminale manualmente usando sp_control_plan_guide.
È necessaria l'appartenenza al ruolo db_owner.
Eventi
31 mar, 23 - 2 apr, 23
Il più grande evento di apprendimento di SQL, Infrastruttura e Power BI. 31 marzo - 2 aprile. Usare il codice FABINSIDER per salvare $400.
Registrati oggiTraining
Modulo
Usare l'Assistente ottimizzazione query di SQL Server - Training
Informazioni sul funzionamento di Query Tuning Assistant (QTA) insieme a Query Store per confrontare le statistiche sulle prestazioni delle query e trovare query regredite a causa della modifica dei livelli di compatibilità.
Certificazione
Microsoft Certified: Azure Database Administrator Associate - Certifications
Amministrare un'infrastruttura di database SQL Server per database relazionali, ibridi, locali e cloud con le offerte di database relazionali Microsoft PaaS.