Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Esplorazione della GUI di Query Store di SQL Server 2016

Introduzione

L'archivio query è una nuova funzionalità, introdotta in SQL Server 2016, che consente agli amministratori di database di rivedere cronologicamente le query e i piani associati utilizzando la GUI disponibile in SQL Server Management Studio, nonché di analizzare le prestazioni delle query utilizzando determinate viste a gestione dinamica. Query Store è un'opzione di configurazione con ambito database ed è disponibile per l'uso se il livello di compatibilità del database in questione è 130.

Query Store è simile a tali tecnologie nella piattaforma di database Oracle come Automatic Workload Repository (AWR). L'AWR acquisisce le statistiche sulle prestazioni su una scala ancora maggiore rispetto a Query Store e consente a un amministratore di database di analizzare storicamente le prestazioni. Concetti come il periodo di conservazione e i limiti di archiviazione dei dati raccolti sono disponibili nell'architettura AWR così come in Query Store. Le seguenti opzioni di configurazione chiave sono disponibili quando si abilita Query Store:

  • Modalità operativa: Determina se Query Store accetterà i dati appena acquisiti (modalità ReadWrite) o memorizzerà semplicemente i vecchi dati disponibili per i report (modalità di sola lettura)
  • Intervallo di svuotamento dei dati: Determina la frequenza con cui i buffer di memoria di Query Store vengono scaricati su un disco. Ricordiamo che i dati di Query Store sono archiviati nel database in cui è abilitato Query Store. Il valore predefinito è 15 minuti.
  • Intervallo di raccolta delle statistiche: Determina la frequenza con cui vengono raccolte le statistiche di runtime dell'archivio query.
  • Taglia massima: Determina quanto può crescere il repository per le statistiche di Query Store. Per impostazione predefinita, è 100 MB.
  • Modalità di acquisizione Query Store: Determina la granularità delle acquisizioni di query. TUTTO, AUTO e NESSUNO sono le opzioni disponibili. Il valore predefinito è AUTO.
  • Modalità di pulizia basata sulle dimensioni: Determina se Query Store cancellerà i vecchi dati quando viene raggiunta la dimensione massima.
  • Soglia query obsolete: Determina il numero di giorni per i quali Query Store conserva i dati. Il valore predefinito è impostato su trenta giorni.

Fig. 2 Opzioni dell'archivio query

L'archivio query è una funzionalità con ambito database che può essere abilitata utilizzando la GUI (SQL Server Management Studio) o eseguendo il comando seguente:

ALTER DATABASE [WideWorldImporters] SET QUERY_STORE =ON;

La telemetria della query raccolta da Query Store viene archiviata nelle tabelle di sistema all'interno del database in cui è stato abilitato Query Store.

Query di esempio e rapporti predefiniti

Finora tutto ciò che ho scritto è disponibile da molte altre fonti; alcuni di essi possono essere trovati nella sezione riferimenti.

In questa sezione, daremo un'occhiata un po' più approfondita a ciò che possiamo effettivamente fare con Query Store una volta abilitato utilizzando semplici esempi. Consideriamo le seguenti due domande:

Listato 1:recupero dei record utilizzando un filtro specifico

usa WideWorldImportersgoselecta.ContactPersonID,a.OrderDate,a.DeliveryMethodID,a.Comments,b.OrderedOutersfromPurchasing.PurchaseOrders anner join Purchasing.PurchaseOrderLines bon a.PurchaseOrderID=b.PurchaseOrderIDwhere a.SupplierReference='ML0300202';go 1000

Listato 2:recupero dei record utilizzando un intervallo

usa WideWorldImportersgoselecta.ContactPersonID,a.OrderDate,a.DeliveryMethodID,a.Comments,b.OrderedOutersfromPurchasing.PurchaseOrders anner join Purchasing.PurchaseOrderLines bon a.PurchaseOrderID=b.PurchaseOrderIDwhere a.SupplierReference like 'ML%';go 1500

Presta attenzione alla versione alternativa di queste query scritte in maiuscolo:

Listato 1:recupero dei record utilizzando un filtro specifico (maiuscolo)

UTILIZZA WIDEWORLDIMPORTERSGOSELECTA.CONTACTPERSONID,A.ORDERDATE,A.DELIVERYMETHODID,A.COMMENTS,B.ORDEREDOUTERSFROMPURCHASING.PURCHASEORDERS AINNER JOIN PURCHASING.PURCHASEORDERLINES BON A.PURCHASEORDERID=B.PURCHASEORDERIDWHERE A.SUPPLIERREFERENCE='ML03050200 pre> 

Listato 2:recupero dei record utilizzando un intervallo (maiuscolo)

UTILIZZA WIDEWORLDIMPORTERSGOSELECTA.CONTACTPERSONID,A.ORDERDATE,A.DELIVERYMETHODID,A.COMMENTS,B.ORDEREDOUTERSFROMPURCHASING.PURCHASEORDERS AINNER JOIN PURCHASING.PURCHASEORDERLINES BON A.PURCHASEORDERID=B.PURCHASEORDERIDWHERE A.SUPPLIERREFERENCE COME 'ML%'; 

Come puoi vedere, abbiamo eseguito queste query più volte utilizzando la parola chiave GO. Pertanto, abbiamo una quantità ragionevole di dati con cui lavorare. La prima cosa di cui dovremmo essere consapevoli quando si utilizza Query Store per analizzare le prestazioni è che ci sono sei report predefiniti integrati in SQL Server 2016 Query Store, come mostrato in Fig. 3.

Fig. 3 Rapporti Query Store

I nomi dei report sono descritti in dettaglio negli articoli precedenti e nella documentazione Microsoft. I dati forniti da questi rapporti vengono recuperati dalle principali viste di gestione dinamica elencate di seguito:

Pianifica i DMV delle statistiche

  • sys.query_store_query_text – contiene testi di query univoci eseguiti sul database
  • sys.query_store_plan – contiene un piano stimato per la query con le statistiche del tempo di compilazione
  • sys.query_context_settings – contiene alcune combinazioni uniche del piano che interessano le impostazioni in base alle quali vengono eseguite le query
  • sys.query_store_query – voci di query che vengono tracciate e forzate separatamente nel Query Store

DMV delle statistiche sul tempo di esecuzione

  • sys.query_store_runtime_stats_interval – Query Store divide il tempo in finestre temporali generate automaticamente (intervalli) e memorizza statistiche aggregate su quell'intervallo per ogni piano eseguito
  • sys.query_store_runtime_stats – contiene statistiche di runtime aggregate per i piani eseguiti

Maggiori dettagli su come utilizzare questi DMV sono disponibili nella documentazione Microsoft di riferimento. In questo articolo, utilizzeremo principalmente la GUI.

Come puoi vedere dalla Fig. 4, esaminiamo il rapporto sul consumo complessivo di risorse mentre nella prossima sezione ci limiteremo alle query elencate in precedenza e ai dati che possiamo recuperare da queste semplici query.

Fig. 4 Rapporto sul consumo complessivo delle risorse

Analisi delle query utilizzando la GUI

Alcuni elementi chiave dovrebbero essere considerati utili quando si utilizzano i rapporti Query Store:

  • Puoi configurare l'ambiente facendo clic sul pulsante evidenziato in Fig 4. La Fig. 5 ci mostra i dettagli che possiamo modificare per adattarli al nostro caso d'uso:criteri di dati da restituire, intervallo di date e set di dati da restituire. Ad esempio, se voglio vedere chiaramente l'ID query associato alle query che sto esaminando, vorrei ridurre il mio set di dati dai primi 25 predefiniti ai primi 10, ad esempio.

    Fig. 5 Opzioni di configurazione del rapporto

    Fig. 6 Le 25 principali query eseguite il 1 maggio 2018

    Fig. 7 Le 10 principali query eseguite il 1 maggio 2018

  • I grafici a barre mostrano i dati principalmente con l'ora sull'asse x, ma puoi eseguire il drill-down di un punto dati specifico per visualizzare i dati in base agli ID query. Ogni ID query determina una query specifica. È importante notare che una query viene identificata in modo univoco mediante l'hashing del testo. Pertanto, una query in minuscolo differisce dalla stessa query in maiuscolo. Questa dovrebbe essere una conoscenza comune:le query ad hoc sono un problema per la cache del piano e sono anche dannose per l'archivio delle query sia in termini di utilizzo dello spazio che di analisi corretta.

    Fig. 8 Query nel Listato 1 (minuscolo, Query 42480)

    Fig. 9 Query nel Listato 3 (Maiuscolo, Query 42490)

  • La terza osservazione importante è il fatto che quando un punto dati è evidenziato in verde, il piano di esecuzione dettagliato mostrato nel riquadro inferiore si riferisce a quel punto dati. Nella Fig. 7, questo punto dati si riferisce all'ID query 42481 che abbiamo eseguito in precedenza (query completa mostrata nel Listato 2). Passando il mouse su questo punto dati viene visualizzata la query, il suo ID e il numero di piani associati a questa query (vedi Fig. 8).

    Fig. 10 Dettagli della query 42481

    La nostra query è stata eseguita 1391 volte poiché è stata acquisita con precisione da Query Store e visualizzata nell'asse y (conteggio di esecuzione) del grafico a barre in Fig. 10. Il report veniva estratto mentre il batch era ancora in esecuzione. Pertanto, non abbiamo il conteggio completo (1500) che ci informa che esiste un'acquisizione di dati in tempo reale ogni volta che viene eseguita una query. Sul lato destro, vediamo anche il Piano utilizzato per queste esecuzioni multiple (Piano 675). Possiamo verificarlo utilizzando la query nel Listato 5.

Elenco 5

UTILIZZA WideWorldImportersGOSELECT Txt.query_text_id, Txt.query_sql_text, Pl.plan_id, Qry.*DA sys.query_store_plan AS PlJOIN sys.query_store_query AS Qry ON Pl.query_id =Qry.query_idJOIN sys.query_store_query_text AS Txt ON Qry.query_text_id =Txt .query_text_iddove Qry.query_id=42481;

Fig. 11 ID query e ID piano da DMV

Un po' di ottimizzazione

Diamo un'occhiata a un'altra query.

Quando eseguiamo la query nel Listato 6 ed esaminiamo i dettagli da Query Store, i dettagli del piano di esecuzione rivelano che abbiamo bisogno di un indice per ottenere un miglioramento del 51%.

Listato 6:Query non ottimale

SELEZIONA TOP (1000) [OrderLineID] ,[OrderID] ,[StockItemID] ,[Description] ,[PackageTypeID] ,[Quantity] ,[UnitPrice] ,[TaxRate] ,[PckedQuantity] ,[PickingCompletedWhen] ,[LastEditedBy ] ,[LastEditedWhen] DA [WideWorldImporters].[Sales].[OrderLines] dove unitPrice> 1000 GO 2000

Fig. 12 Dettagli della query non ottimali

Fig. 13 Piano di esecuzione delle query non ottimale

Dopo aver creato l'indice consigliato utilizzando l'istruzione nel Listato 7, Query Optimizer genera un nuovo piano di esecuzione. In questo caso, il nuovo piano di esecuzione dovrebbe migliorare le prestazioni. Tuttavia, ci sono casi in cui alcune modifiche possono causare un peggioramento delle prestazioni, come cambiamenti significativi nel volume dei dati che invalidano effettivamente le statistiche o riducono il numero di indici e così via. Si dice che tali query siano regredite in termini di prestazioni e possono essere esaminate utilizzando il rapporto Query regredite in Query Store.

Listato 7:creazione dell'indice

UTILIZZA [WideWorldImporters]GOCREATE NONCLUSTERED INDEX [Custom_IX_UnitPrice]ON [Sales].[OrderLines] ([UnitPrice])INCLUDE([OrderLineID],[OrderID],[StockItemID],[Description],[PackageTypeID],[Quantity ],[Tasso d'imposta],[Quantità prelevata],[Prelievo completato quando],[LastEditedBy],[LastEditedWhen])Vai

Fig. 14 Query ottimizzata (Modifica nel piano di esecuzione)

Fig. 15 Query ottimizzata (due piani)

Fig. 16 Query ottimizzata (Piano di forza)

Quando ci sono più piani per una query come mostrato in Fig. 14 e Fig. 16, possiamo dire all'ottimizzatore di utilizzare sempre un piano che scegliamo facendo clic sul pulsante Forza piano. Questo era un compito un po' noioso nelle versioni precedenti di SQL Server.

Come puoi vedere dalla Fig. 17, Query Store ci consente di confrontare i diversi piani associati a una query utilizzando una serie di metriche.

Fig. 17 Confronto tra i piani di esecuzione

Anche in questo caso, possiamo utilizzare la query nel Listato 8 per verificare i piani associati a questo ID query utilizzando DMV. (Fare riferimento alla Fig. 11)

Listato 8:piani associati alla query 42497

UTILIZZA WideWorldImportersGOSELECT Txt.query_text_id, Txt.query_sql_text, Pl.plan_id, Qry.*DA sys.query_store_plan AS PlJOIN sys.query_store_query AS Qry ON Pl.query_id =Qry.query_idJOIN sys.query_store_query_text AS Txt ON Qry.query_text_id =Txt .query_text_iddove Qry.query_id=42497;

Esplorazione delle variazioni

Un altro utile report di cui Query Store si avvale è Query With High Variation. Questo rapporto mostra la distanza tra le metriche desiderate per una query specifica in un determinato periodo. Questo è molto utile per l'analisi storica delle prestazioni. Utilizzando le affermazioni nel Listato 9, generiamo dati che possono fornire un'immagine di come sarebbero le variazioni. I passaggi della procedura creano semplicemente una piccola tabella e quindi inseriscono record utilizzando batch di dimensioni diverse.

Listato 9:piani associati alla query 42497

usa WideWorldImportersgo-- Crea una tabellacrea una tabella tableone(ID int identity(1000,1),FirstName varchar(30),LastName varchar(30),CountryCode char(2),HireDate datetime2 default getdate());-- Inserisci record in lotti di dimensioni diverse:inserisci nei valori di tableone ('Kenneth', 'Igiri', 'NG', getdate()); GO 10000 inserisci nei valori di tableone ('Kwame', 'Boateng', 'GH', getdate());GO 10insert nei valori di tableone ('Philip','Onu','NG',getdate());GO 100000insert nei valori di tableone ('Kwesi','Armah','GH', getdate());GO 100

Query Store ci mostra dettagli come i valori minimo e massimo di queste metriche per intervalli di esecuzione specifici della query che ci interessa. In questo esempio, scopriamo che questo è semplicemente il risultato del numero di batch per esecuzione (notare che il i parametri vengono effettivamente utilizzati per eseguire l'istruzione INSERT). Nella produzione, altri fattori potrebbero essere responsabili di tali variazioni.

Fig. 18 Variazioni nella durata

Fig. 19 Variazione nelle scritture logiche

Fig. 20 Variazione nelle letture fisiche

Conclusione

In questo articolo, abbiamo esaminato l'ambiente GUI di SQL Server 2016 Query Store e alcune cose che possiamo dedurre in merito alle prestazioni della nostra istanza (rispetto a SQL) utilizzando Query Store. Ci sono diversi articoli su Internet che mostrano casi d'uso ancora più avanzati e spiegazioni molto più approfondite degli interni. Questo articolo dovrebbe essere utile ai DBA di livello medio che desiderano ottenere un vantaggio nell'utilizzo di Query Store per la valutazione/ottimizzazione delle prestazioni.

Riferimenti

  • Best practice con Query Store
  • Cristiman, L. (2016) Query Store – Impostazioni e limiti
  • Monitoraggio delle prestazioni utilizzando il Query Store
  • Query sulle visualizzazioni del catalogo Store
  • Query Store Stored procedure
  • Query Store:come funziona e come utilizzarlo
  • Scenari di utilizzo di Query Store
  • Van de Lar, E. (2016) Query Store di SQL Server 2016:forzare i piani di esecuzione utilizzando Query Store

Strumento utile:

dbForge Query Builder per SQL Server:consente agli utenti di creare query SQL complesse in modo rapido e semplice tramite un'interfaccia visiva intuitiva senza la scrittura manuale del codice.