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

Recensione del libro:Benjamin Nevarez:Ottimizzazione e ottimizzazione delle query

La mia copia di Microsoft SQL Server 2014 Query Tuning &Optimization (disponibile anche su Kindle), di Benjamin Nevarez, è arrivata la scorsa settimana. Non sono stato in grado di arrivarci immediatamente, ma durante il fine settimana sono stato finalmente in grado di attraversarlo tra il cambio del pannolino e una gita allo zoo.

TL;DR:ne vale la pena

Benjamin presenta una spiegazione approfondita dell'intero processo di ottimizzazione delle query e molto del background di cui avrai bisogno per dare un senso a tutto. Si occupa di indici, statistiche e memorizzazione nella cache dei piani, nonché di come affrontare problemi comuni come lo sniffing dei parametri. Spiega opzioni popolari come Ottimizza per carichi di lavoro ad hoc e Parametrizzazione forzata e come cambiano il modo in cui i piani vengono memorizzati nella cache e riutilizzati. Discute anche di molte funzionalità non documentate e flag di traccia che possono aiutarti a comprendere meglio (o costringere) l'approccio di SQL Server alla tua query e come utilizzare Trace, Extended Events e comandi DBCC per rivedere le decisioni prese dall'ottimizzatore e l'impatto che hanno ' ho avuto.

C'è anche una buona parte del contenuto dedicata a molte nuove funzionalità di SQL Server 2014, tra cui In-Memory OLTP ("Hekaton"), indici columnstore cluster, statistiche incrementali e il nuovo stimatore di cardinalità. Durante la stesura del libro, i database di esempio AdventureWorks per SQL Server 2014 non sono stati ancora pubblicati, ma sono ora disponibili.

Il libro si conclude con un capitolo complesso ma informativo sulle limitazioni di Query Optimizer che portano a piani non ottimali e su come utilizzare suggerimenti e guide di pianificazione per aggirarli.

Alcune limitazioni

Sebbene sia un riferimento generale abbastanza completo all'ottimizzazione delle query, c'erano un paio di cose che pensavo avrebbero potuto essere migliori:

  • Benjamin parla della raccolta di informazioni ShowPlan da Trace ed Extended Events e sottolinea correttamente che Profiler non è il modo in cui si desidera eseguire le tracce, a causa dell'orrendo e ben documentato sovraccarico delle prestazioni. Questa è una buona cosa, dal momento che trace è deprecato e Profiler è ciò che le persone di solito usano per impostazione predefinita. C'è un piccolo avviso sul sovraccarico di query_post_execution_showplan evento, a cui penso avrebbe potuto essere data un po' più di enfasi, ricordando che questo dovrebbe essere utilizzato solo per regolazioni e risoluzione dei problemi molto mirate. È probabile che raccogliere questo per ogni query nel tuo carico di lavoro faccia più male che bene.
  • Discute di indici e statistiche filtrati, ma ignora il fatto che sono problematici quando si tratta di aggiornamenti automatici, poiché non viene utilizzato alcun algoritmo speciale anche se l'indice rappresenta solo un sottoinsieme della tabella. Microsoft ha confermato che si tratta di un problema, ma a questo punto non hanno in programma di risolverlo. Per ulteriori informazioni, vedere Connetti n. 509638 e Connetti n. 333532. Vedi anche questo post del blog per molte altre limitazioni dell'indice filtrato da considerare.
  • Sebbene la copertura delle funzionalità del 2014 sia stata piuttosto completa, sono stato sorpreso di non trovare alcuna menzione di sys.dm_exec_query_profiles , un nuovo DMV per monitorare l'avanzamento delle query in tempo reale, fino al singolo operatore. Tuttavia, non è un'informazione essenziale per tutti, poiché non è un caso d'uso estremamente ampio (IMHO è davvero utile solo per query particolarmente lunghe).
  • Questa è una scelta totale, ma è comune tra i titoli tecnici:l'indice è leggermente impreciso. Ad esempio, il riferimento a SQL Sentry Plan Explorer punta a pagina 13, ma il contenuto rilevante si trova in realtà a pagina 14. Come ho detto, una piccola nit-pick, mi ha semplicemente distinto perché è stata la prima cosa che ho guardato in alto nell'indice. :-)

Non prenderei in considerazione queste lamentele, di per sé. Nessun libro può contenere ogni minimo dettaglio di ogni cosa. Quindi, per favore, considerale aggiunte. :-)

Riepilogo

Questo è diventato rapidamente un riferimento conveniente per me; le orecchie di cane stanno già sostituendo molti dei miei segnalibri con post di blog che menzionano dettagli oscuri o tracce di flag, e in molti casi Benjamin lo ha descritto in modo più dettagliato e/o inquadrato con un contesto migliore. Tra questo libro e un paio di titoli citati di seguito, penso che chiunque abbia familiarità con T-SQL potrebbe aggiornarsi abbastanza rapidamente, anche senza avere alcuna conoscenza dell'ottimizzatore prima di immergersi.

Materiali complementari

Altri libri che consiglierei per completare questo titolo:

  • Concedi a Fritchey l'ottimizzazione delle prestazioni delle query di SQL Server
  • Indicizzazione delle prestazioni degli esperti di Jason Strate per SQL Server 2012
  • Concedi a Fritchey i piani di esecuzione di SQL Server

E, naturalmente, c'è una scorta infinita di post di blog e altri articoli per aiutarti a comprendere l'ottimizzazione e l'ottimizzazione. Sono un po' parziale nei confronti del materiale di Paul White:sono più profondi di quanto i mortali vorrebbero andare, ma puoi ricavarne un sacco anche semplicemente sfiorandoli. Grant e Gail Shaw hanno anche alcuni contenuti preziosi su query e piani di esecuzione, e Kimberly Tripp ed Erin Stellato sono ottime risorse per qualsiasi cosa relativa all'indice o alle statistiche.

  • Paolo Bianco:SQLPerformance.com | sql.kiwi
  • Concedi a Fritchey (e risorse)
  • Gail Shaw
  • Kimberly Tripp
  • Erin Stellato

Potresti trovare qualche sovrapposizione, ma io sono un grande sostenitore del consumo di informazioni da più fonti. A volte presentano le stesse informazioni, ma la lampadina scatta in base al modo in cui una persona l'ha detta o al contesto che ha fornito. Probabilmente mi sono perse anche altre 50 persone con ottimo materiale.

Oh, e ho già menzionato il nostro strumento gratuito, Plan Explorer, può aiutare anche con questo? Il mio kit demo aggiornato illustra una serie di esempi.