sql >> Database >  >> RDS >> Database

Boekbespreking :Benjamin Nevarez :Zoekopdracht afstemmen en optimaliseren

Mijn exemplaar van Microsoft SQL Server 2014 Query Tuning &Optimization (ook beschikbaar op Kindle), door Benjamin Nevarez, is vorige week aangekomen. Ik kon er niet meteen bij, maar in het weekend kon ik er eindelijk doorheen cruisen tussen het verschonen van luiers en een uitstapje naar de dierentuin.

TL;DR:het geld waard

Benjamin geeft een grondige uitleg van het hele query-optimalisatieproces, en veel van de achtergrond die je nodig hebt om alles te begrijpen. Hij behandelt indexen, statistieken en plancaching, evenals hoe om te gaan met veelvoorkomende problemen zoals het snuiven van parameters. Hij legt populaire opties uit, zoals Optimize for Ad Hoc Workloads en Forced Parametrering, en hoe ze de manier veranderen waarop plannen in de cache worden opgeslagen en opnieuw worden gebruikt. Hij bespreekt ook veel ongedocumenteerde functies en traceervlaggen die u kunnen helpen de benadering van SQL Server voor uw query beter te begrijpen (of af te dwingen), en hoe u Trace, Extended Events en DBCC-opdrachten kunt gebruiken om de beslissingen die de optimizer heeft genomen en de impact die ze hebben te beoordelen. heb gehad.

Er is ook een groot deel van de inhoud gewijd aan veel nieuwe SQL Server 2014-functies, waaronder In-Memory OLTP ("Hekaton"), geclusterde columnstore-indexen, incrementele statistieken en de nieuwe kardinaliteitsschatter. Terwijl het boek werd geschreven, waren de AdventureWorks-voorbeelddatabases voor SQL Server 2014 nog niet gepubliceerd, maar ze zijn nu beschikbaar.

Het boek eindigt met een complex maar informatief hoofdstuk over de beperkingen van query-optimalisatie die leiden tot suboptimale plannen, en hoe u hints en planhandleidingen kunt gebruiken om deze te omzeilen.

Enkele beperkingen

Hoewel het een vrij complete algemene verwijzing is naar het afstemmen van zoekopdrachten, waren er een paar dingen waarvan ik dacht dat ze beter hadden gekund:

  • Benjamin heeft het over het verzamelen van ShowPlan-informatie van Trace en Extended Events, en wijst er terecht op dat Profiler niet de manier is waarop je traces wilt uitvoeren, vanwege de verschrikkelijke en goed gedocumenteerde prestatie-overhead. Dit is een goede zaak, aangezien traceren is verouderd en Profiler de standaard is die mensen gebruiken. Er is een kleine waarschuwing over de overhead van het query_post_execution_showplan evenement, waarvan ik denk dat er wat meer nadruk op had kunnen liggen, met een herinnering dat dit alleen mag worden gebruikt voor zeer gerichte afstemming en probleemoplossing. Als u dit voor elke zoekopdracht in uw werklast verzamelt, doet u waarschijnlijk meer kwaad dan goed.
  • Hij bespreekt gefilterde indexen en statistieken, maar verdoezelt het feit dat ze problematisch zijn als het gaat om automatische updates, aangezien er geen speciaal algoritme wordt gebruikt, ook al vertegenwoordigt de index slechts een subset van de tabel. Microsoft heeft bevestigd dat dit een probleem is, maar op dit moment hebben ze geen plannen om het op te lossen. Zie Connect #509638 en Connect #333532 voor meer informatie. Zie ook deze blogpost voor een heleboel andere gefilterde indexbeperkingen waarmee u rekening moet houden.
  • Hoewel de dekking van de functies van 2014 behoorlijk uitgebreid was, was ik verrast geen enkele vermelding te vinden van sys.dm_exec_query_profiles , een nieuwe DMV voor het in realtime volgen van de voortgang van zoekopdrachten - helemaal tot aan de individuele operator. Het is echter niet voor iedereen essentiële informatie, aangezien het geen extreem brede toepassing is (IMHO is het alleen echt nuttig voor bijzonder langlopende zoekopdrachten).
  • Dit is een absolute nit-pick, maar het is er een die veel voorkomt bij technische titels:de index is enigszins onnauwkeurig. De verwijzing naar SQL Sentry Plan Explorer verwijst bijvoorbeeld naar pagina 13, maar de relevante inhoud staat eigenlijk op pagina 14. Zoals ik al zei, heel kleine nit-pick, het viel me gewoon op omdat dat het allereerste was dat ik keek omhoog in de index. :-)

Ik zou deze klachten niet per se in overweging nemen. Geen enkel boek kan elk detail over alles bevatten. Dus beschouw ze alsjeblieft als addenda. :-)

Samenvatting

Dit is snel een handig naslagwerk voor mij geworden; de ezelsoren zijn al verschillende van mijn bladwijzers aan het vervangen door blogposts die toevallig een obscuur detail of spoorvlag vermelden, en in veel gevallen heeft Benjamin het gedetailleerder beschreven en/of ingekaderd met een betere context. Tussen dit boek en een paar titels waarnaar hieronder wordt verwezen, denk ik dat iedereen die bekend is met T-SQL vrij snel op snelheid kan komen, zelfs zonder enige kennis van de optimizer voordat hij erin duikt.

Aanvullende materialen

Andere boeken die ik zou aanraden om deze titel aan te vullen:

  • Verleen Fritchey's prestatieafstemming voor SQL Server-query's
  • Jason Strate's Expert Performance Indexing voor SQL Server 2012
  • Verleen Fritchey's uitvoeringsplannen voor SQL Server

En natuurlijk is er een eindeloze voorraad blogposts en andere artikelen om je te helpen bij het begrijpen van tuning en optimalisatie. Ik heb een beetje een voorliefde voor het materiaal van Paul White - ze zijn ongeveer zo diep als stervelingen ooit zouden willen gaan, maar je kunt er ook een hoop uit halen door er alleen maar op te afromen. Grant en Gail Shaw hebben ook waardevolle inhoud over vragen en uitvoeringsplannen, en Kimberly Tripp en Erin Stellato zijn geweldige bronnen voor alles wat met indexen of statistieken te maken heeft.

  • Paul White:SQLPerformance.com | sql.kiwi
  • Grant Fritchey (en bronnen)
  • Gail Shaw
  • Kimberly Tripp
  • Erin Stellato

Misschien vind je enige overlap, maar ik ben een groot voorstander van het consumeren van informatie uit meerdere bronnen. Soms presenteren ze dezelfde informatie, maar klikt de lamp op basis van de manier waarop iemand het zei of de context die ze gaven. Ik heb waarschijnlijk ook ongeveer 50 andere mensen met geweldig materiaal gemist.

Oh, en had ik al gezegd dat onze gratis tool, Plan Explorer, hier ook bij kan helpen? Mijn bijgewerkte demokit laat een aantal voorbeelden zien.


  1. hoe de wf_java_deferred-wachtrij opnieuw op te bouwen

  2. Uitzondering voor het gooien van transacties op dit platform ondersteunt geen gedistribueerde transacties tijdens het openen van het verbindingsobject

  3. Hernoemen van inplugbare database

  4. Invoegen als rij niet bestaat (UPSERT) in MySQL