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

SQL Server-udførelsesplan — hvad er det, og hvordan hjælper det med ydeevneproblemer?

En SQL Server-udførelsesplan er nyttig til at undersøge ydeevneproblemer med dine forespørgsler. Databaseprofessionelle modtager ofte fejlmeldinger eller brugerklager over, at forespørgsler kører langsomt. Forespørgselsresultater, der plejede at tage to eller tre minutter, kræver pludselig mere end 30 minutter. Fejlfinding kan kræve, at man undersøger områder som f.eks. serverressourcer (CPU, hukommelse), statistik, diskydeevne, blokering, deadlocks og indekser. I denne artikel vil vi fokusere på SQL Server-udførelsesplanens rolle i løsningen af ​​ydeevneproblemer.

Hvad sker der, når du sender T-SQL i SQL Server?

Lad os se på, hvad der sker, når du sender en forespørgsel ved hjælp af Transact-SQL eller T-SQL i SQL Server. For brugerne gør det selvfølgelig ingen forskel. Brugere forventer at få nøjagtige resultater hurtigt, uanset om de forespørger i databasen eller søger på nettet.

Workflowet på højt niveau for en SQL-forespørgsel

  1. Brugeren godkender til SQL Server i en klientapplikation og sender en forespørgsel.
  2. SQL-server analyserer forespørgslen og kontrollerer for eventuelle syntaksfejl.
  3. Fortolkningstræet behandles yderligere i Algebrizer, som løser alle objekter, tabeller og kolonner i forespørgslen. Den udfører også en kontrol af kolonnedatatyperne. I tilfælde af problemer, returnerer den en fejl. Algebrizer genererer et forespørgselsprocestræ og en forespørgselshash. Hvis eksekveringsplanen allerede eksisterer, bruger SQL Server den cachelagrede plan og udfører forespørgslen.
  4. Hvis der ikke findes nogen plan, eller planen er forældet, udfører Query Optimizer en fuld omkostningsbaseret optimering ved hjælp af statistik, forespørgselsprocestræ og begrænsninger. Baseret på disse input udarbejder den den omkostningsoptimerede SQL Server-udførelsesplan.
  5. Til sidst udfører SQL Server-forespørgselsmotoren forespørgslen i henhold til udførelsesplanen og returnerer resultaterne.

Oversigt over en SQL Server-udførelsesplan

En SQL Server-udførelsesplan hjælper databaseprofessionelle med at fejlfinde forespørgselsydeevne og skrive effektive forespørgsler. Når en forespørgsel tager lang tid at køre, kan SQL Server-udførelsesplanen hjælpe dig med at identificere det punkt, hvor forespørgslen tager flest ressourcer og tid.

Du kan bruge et af følgende til at generere en eksekveringsplan:

  1. SQL Server Management Studio
  2. Azure Data Studio
  3. SQL Server-profiler
  4. Udvidede begivenheder
  5. Dynamiske administrationsvisninger
  6. Tredjeparts databaseovervågningssoftware

Udførelsesplanerne genereret af #1 til #5 er ens. Tredjeparts databaseovervågningssoftware (nr. 6) giver yderligere funktioner, der bruger farvekodning til at identificere dyre operatører.

SQL Server giver estimerede og faktiske udførelsesplaner, svarende til hvad du oplever, når du skal reparere din bil. En mekaniker inspicerer dit køretøj, hvorefter du modtager et overslag over arbejdet baseret på dine krav, køretøjets tilstand og den omtrentlige tid og materialer, som mekanikeren mener, reparationen vil tage. Selvfølgelig kan de faktiske omkostninger og tid variere, som det gør med estimerede og faktiske SQL Server-udførelsesplaner.

Estimerede udførelsesplaner

Uden at udføre forespørgslen kan du få en estimeret (logisk) SQL Server-udførelsesplan baseret på SQL Server-statistik. I SQL Server Management Studio (SSMS) skal du følge disse trin:

  1. Fremhæv forespørgslen (i tilfælde af at du ønsker udførelsesplanen for en specifik forespørgsel).
  2. Klik på knappen Vis estimeret eksekveringsplan (tastaturgenvej Ctrl + L), som vist nedenfor.

Nogle gange er SQL Server ikke i stand til at lave en estimeret plan; for eksempel hvis en parameter bruges uden at angive dens værdi i forespørgslen, eller hvis en midlertidig tabel ikke er erklæret.

Faktisk udførelsesplan

Når du har sendt forespørgslen til SQL Server, kan du få en faktisk eksekveringsplan, der repræsenterer de trin, som SQL Server tog for at udføre forespørgslen. Som i bilreparationsscenariet er dette ligesom den faktiske regning, du modtager.

For at få den faktiske udførelsesplan, følg nedenstående trin i SSMS, før du kører forespørgslen.

  1. Fremhæv forespørgslen.
  2. Klik på Vis faktisk udførelsesplan knap (tastaturgenvej Ctrl + M ), som vist ovenfor.

SQL Server-udførelsesplanformater

Som standard genererer SSMS-procedurerne forklaret ovenfor en SQL Server-udførelsesplan i grafisk format. Men du har mulighed for at se eksekveringsplaner i tre forskellige formater:

  1. Grafisk
  2. XML
  3. Tekst

Lad os se på hvert af disse formater.

1. Grafisk udførelsesplan

Den grafiske plan viser alle komponenter, inklusive dataflow, som vist nedenfor.

Operatører

Operatører vises som ikoner. Hver operatør er udpeget til at udføre en bestemt opgave. Forespørgselsoptimeringsværktøjet i SQL Server kan f.eks. udføre en tabelscanning, en indeksscanning og en søgning. Sådan ser en grupperet indekssøgningsoperatør ud, når den henter data fra et indeks i tabellen [AdventureWorks2019].[HumanResources]:

Omkostning i procent

Den grafiske plan viser også en procentdel af omkostningerne - her 99% for den grupperede indekssøgning - forbundet med operatøren. Denne pris er i forhold til de andre operatører, der bruges til at udføre forespørgslen.

Dataflowpile

Pile forbinder operatørerne, og deres bredde afspejler antallet af rækker af data, der flytter sig fra den ene operatør til den næste.

Antag for eksempel, at din forespørgsel kun genererer en enkelt række af output, men det tager lang tid at fuldføre. Flytter du musen til dataflowpilen i udførelsesplanen, finder du ud af, at antallet af læste rækker er i millioner. Det repræsenterer en enorm ubalance i ressourceudnyttelsen og afslører et område, der har behov for optimering.

Værktøjstip

Som vist nedenfor, når du fører musen over en operatør, vises værktøjstip med flere statistikker om dataflow.

Egenskabsvindue

Egenskabsvinduet viser detaljerede oplysninger om operatørerne og deres komponenter. Dette er et supersæt af værktøjstip.

2. XML-formateret SQL Server eksekveringsplan

XML-udførelsesplanen er i et specifikt, struktureret format. Selvom XML-formatet er mindre visuelt intuitivt, indeholder det alle detaljerne i XML og kræver ikke yderligere trin for at se egenskaber og værktøjstip. Du kan nemt konvertere XML-format til grafisk format og omvendt.

For at konvertere en grafisk udførelsesplan til XML-format skal du højreklikke på den og vælge Vis udførelsesplan XML , som vist nedenfor.

Resultatet er følgende strukturerede, XML-formaterede udførelsesplan.

Følgende kommandoer genererer også udførelsesplanen i XML-format:

  • For den estimerede plan:INDSTIL SHOWPLAN_XML TIL
  • For den faktiske plan: SET STATISTICS_XML TIL

3. Tekstformateret SQL Server-udførelsesplan

Du kan generere udførelsesplanen på flere måder:

  • INDSTILL SHOWPLAN_TEXT TIL

Denne kommando genererer den estimerede udførelsesplan, uden detaljerede oplysninger om udførelse af forespørgsler. Det er beregnet til applikationer som sqlcmd utility.

  • INDSTILL SHOWPLAN_ALL TIL

Denne kommando genererer den estimerede udførelsesplan, med detaljerede oplysninger om alle operatører og operationer i tabelformat.

  • INDSTIL STATISTIKPROFIL

Denne kommando genererer en faktisk udførelsesplan, efter udførelse af forespørgsel, i tabelformat.

Hvorfor er estimerede og faktiske SQL Server-udførelsesplaner forskellige?

Estimerede og faktiske udførelsesplaner er generelt ens, selvom nogle omstændigheder kan få dem til at afvige.

Uaktuel statistik

Den primære årsag til forskelle mellem estimerede og faktiske udførelsesplaner er forældede statistikker.

Forespørgselsoptimeringsværktøjet bruger statistik til at opbygge en omkostningseffektiv og optimeret plan for udførelse af forespørgsler. Hvis din statistik ikke er opdateret, eller hvis din datasampling ikke er passende, vil forespørgselsoptimering udføre en fuld optimering og opbygge en eksekveringsplan baseret på gammel information. Du kan også få en ineffektiv eksekveringsplan, der kan føre til problemer med forespørgselsydeevne.

Forældede statistikker forekommer nogle gange, når data ændres ofte, og statistikker ikke opdateres i henhold til indeksvedligeholdelse.

Seriel eller parallel SQL Server-udførelsesplan

På kompileringstidspunktet opbygger forespørgselsoptimeringsværktøjet en eksekveringsplan og producerer en seriel eller parallel plan afhængigt af forespørgselsomkostninger og omkostningstærsklen for parallelitet. Selvom eksekveringsplanen kan være den samme for både serielle og parallelle tilstande, beslutter SQL Server mellem dem baseret på serverressourcer og aktivitet.

Ugyldige estimater

Som tidligere nævnt binder Algebrizer navnene på objekterne, før SQL-forespørgslen udføres. Antag, at du angiver, at en tabel med navnet test vil blive OPRETTET under kørsel, og prøv derefter at generere en estimeret eksekveringsplan. Fordi den tabel ikke eksisterer, vil du modtage en fejlmeddelelse, som vist nedenfor.

Brug af udførelsesplanen

Sammenfattende kan du generere en SQL Server-udførelsesplan i grafiske, XML- og tekstformater og bruge den til at hjælpe dig med at løse dine databaseydelsesproblemer.

Planer for udførelse af forespørgsler er primære trin i at identificere forespørgselsarbejdsgange, operatører og komponenter, så du kan justere dine forespørgsler til enhver mulig forbedring. For flere oplysninger om brug af eksekveringsplaner, se vores indlæg: Sådan læser og analyserer du eksekveringsplaner.


  1. SQLite Node.js

  2. Sådan fungerer SQLite Nullif()

  3. Docker PGMASTER PostgreSQL-versionsopdatering

  4. Er der sådan noget CASE-udtryk i JPQL?