Min kopi af Microsoft SQL Server 2014 Query Tuning &Optimization (også tilgængelig på Kindle), af Benjamin Nevarez, ankom i sidste uge. Jeg var ikke i stand til at komme til det med det samme, men i weekenden var jeg endelig i stand til at krydse igennem det mellem bleskift og en tur i zoologisk have.
TL;DR:Pengene værd
Benjamin præsenterer en grundig forklaring af hele forespørgselsoptimeringsprocessen, og meget af baggrunden skal du bruge for at give mening ud af det hele. Han behandler indekser, statistikker og plancaching, samt hvordan man håndterer almindelige problemer såsom parametersniffing. Han forklarer populære muligheder som Optimize for Ad Hoc Workloads og Forced Parameterization, og hvordan de ændrer måden, planerne cachelagres og genbruges på. Han diskuterer også mange udokumenterede funktioner og sporingsflag, der kan hjælpe dig med bedre at forstå (eller gennemtvinge) SQL Servers tilgang til din forespørgsel, og hvordan du bruger Trace, Extended Events og DBCC-kommandoer til at gennemgå de beslutninger, som optimizeren havde truffet, og den indflydelse, de har haft.
Der er også en god del af indholdet dedikeret til mange nye SQL Server 2014-funktioner, inklusive In-Memory OLTP ("Hekaton"), clustered columnstore-indekser, inkrementelle statistikker og den nye kardinalitetsestimator. Da bogen blev skrevet, var AdventureWorks-eksempeldatabaserne til SQL Server 2014 endnu ikke udgivet, men de er tilgængelige nu.
Bogen slutter med et komplekst, men informativt kapitel om forespørgselsoptimeringsbegrænsninger, der fører til suboptimale planer, og hvordan man bruger tip og planvejledninger til at omgå dem.
Nogle begrænsninger
Selvom en ret komplet overordnet reference til forespørgselsindstilling, var der et par ting, jeg troede kunne have været bedre:
- Benjamin taler om at indsamle ShowPlan-oplysninger fra Trace og Extended Events, og påpeger korrekt, at Profiler ikke er den måde, du ønsker at køre spor på, på grund af den forfærdelige og veldokumenterede ydeevne. Dette er en god ting, da sporing er forældet, og Profiler er, hvad folk normalt bruger som standard. Der er en mindre advarsel om overhead af
query_post_execution_showplan
begivenhed, som jeg synes kunne have været lagt lidt mere vægt på, med påmindelser om, at dette kun skal bruges til meget målrettet tuning og fejlfinding. At indsamle dette for hver forespørgsel i din arbejdsmængde vil sandsynligvis gøre mere skade end gavn.
- Han diskuterer filtrerede indekser og statistikker, men overser, at de er problematiske, når det kommer til automatiske opdateringer, da der ikke er nogen speciel algoritme brugt, selvom indekset kun repræsenterer en delmængde af tabellen. Microsoft har bekræftet, at dette er et problem, men på nuværende tidspunkt har de ingen planer om at løse det. For mere information, se Connect #509638 og Connect #333532. Se også dette blogindlæg for en masse andre filtrerede indeksbegrænsninger, du bør overveje.
- Selvom dækningen af 2014-funktioner var ret omfattende, var jeg overrasket over ikke at finde nogen omtale af
sys.dm_exec_query_profiles
, en ny DMV til sporing af forespørgselsfremskridt i realtid – helt ned til den enkelte operatør. Det er dog ikke essentiel information for alle, da det ikke er et ekstremt bredt anvendelsestilfælde (IMHO det er kun virkelig nyttigt til særligt langvarige forespørgsler).
- Dette er et totalt nit-valg, men det er en, der er almindelig blandt tekniske titler:Indekset er lidt unøjagtigt. For eksempel peger henvisningen til SQL Sentry Plan Explorer til side 13, men det relevante indhold er faktisk på side 14. Som sagt, meget lille nit-pick, det stod bare ud for mig, fordi det var det allerførste, jeg så op i indekset. :-)
Jeg ville ikke overveje disse klager i sig selv. Ingen bog kan indeholde alle detaljer om alting. Så overvej dem venligst tilføjelser. :-)
Oversigt
Dette er hurtigt blevet en bekvem reference for mig; hundeørerne erstatter allerede flere af mine bogmærker til blogindlæg, der tilfældigvis nævner nogle obskure detaljer eller sporflag, og i mange tilfælde har Benjamin beskrevet det mere detaljeret og/eller indrammet det med bedre sammenhæng. Mellem denne bog og et par titler, der henvises til nedenfor, tror jeg, at enhver, der er bekendt med T-SQL, kunne komme op i fart ret hurtigt, endda uden viden om optimeringsværktøjet, før de dykkede ind.
Supplerende materialer
Andre bøger jeg vil anbefale som supplement til denne titel:
- Gent Fritchey's SQL Server Query Performance Tuning
- Jason Strates Expert Performance Indexing for SQL Server 2012
- Gent Fritchey's SQL Server Execution Plans
Og selvfølgelig er der et uendeligt udbud af blogindlæg og andre artikler til at hjælpe med din forståelse af tuning og optimering. Jeg er lidt delvis over for Paul Whites materiale - de er omtrent lige så dybe, som dødelige nogensinde ville ønske at gå, men du kan også få et ton ud af dem ved blot at skimme. Grant og Gail Shaw har også noget værdifuldt indhold om forespørgsler og udførelsesplaner, og Kimberly Tripp og Erin Stellato er gode ressourcer til alt indeksrelateret eller statistikrelateret.
- Paul White:SQLPerformance.com | sql.kiwi
- Gent Fritchey (og ressourcer)
- Gail Shaw
- Kimberly Tripp
- Erin Stellato
Du kan finde nogle overlapninger, men jeg er en stor tilhænger af at forbruge information fra flere kilder. Nogle gange præsenterer de den samme information, men pæren klikker baseret på den måde, en person sagde det på, eller den kontekst, de gav. Jeg savnede sikkert også omkring 50 andre mennesker med fantastisk materiale.
Åh, og nævnte jeg, at vores gratis værktøj, Plan Explorer, også kan hjælpe med dette? Mit opdaterede demosæt gennemgår en masse eksempler.