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

Sådan læser og analyserer du SQL Server-udførelsesplaner

SQL Server-udførelsesplaner er en gateway til forespørgselsoptimering og forespørgselsudførelser for databaseprofessionelle. De afslører forespørgselsbehandling og involverede faser såsom berørte tabeller, indekser, statistikker, typer af joinforbindelser, antallet af berørte rækker, forespørgselsbehandling, datasortering og datahentning.

I en tidligere artikel, SQL Server Execution Plan — Hvad er det, og hvordan hjælper det med ydeevneproblemer? vi udforskede arbejdsgangen for udførelse af forespørgsler på højt niveau, de forskellige typer af eksekveringsplaner (grafisk, XML og tekst) sammen med faktiske og estimerede udførelsesplaner.

Nu vil vi undersøge ting, du har brug for at vide, når du evaluerer SQL Server-udførelsesplaner, og hvordan du bedst fortolker oplysningerne.

Læsning af en grafisk SQL Server-udførelsesplan

Generelt læser vi udførelsesplaner fra højre mod venstre. Du begynder med den øverste højre udførelsesplanoperatør og bevæger dig mod venstre. Det hjælper dig med at følge det logiske dataflow i forespørgslen.

Antag, at du udfører følgende forespørgsel i en [AdventureWorks2019] eksempeldatabase og ser den faktiske udførelsesplan.

SELECT TOP (10) [SalesOrderID] [SalesOrderDetailID] [CarrierTrackingNumber] [OrderQty] [ProductID] [SpecialOfferID] [ModifiedDate] FROM [AdventureWorks2019].[Sales].[SalesOrderDetail] where [UnitPrice]>1000

Forespørgslen henter data fra tabellen [Sales].[SalesOrderDetail] for ordrer med en enhedspris på over 1.000.

Hvis vi læser udførelsesplanen fra højre mod venstre, bemærker vi følgende:

  • Den første operator er Clustered Index Scan, der læser data fra tabellen [Sales].[SalesOrderDetail]. Når du tager musemarkøren til pilen, der forbinder Clustered Index Scan og Top operatoren, returnerer den det estimerede og faktiske antal rækker og estimeret datastørrelse.

  • Den overfører data fra Clustered Index Scan-operatoren til Top-operatoren sender de 10 rækker til SELECT-operatoren.

Internt udfører SQL Server planen fra venstre mod højre. Hvis du er interesseret i operatørens fysiske ordrer, bør du læse en udførelsesplan fra venstre mod højre. Hver operatør anmoder om data fra den næste operatør. For eksempel, i ovenstående scenarie, anmoder Top-operatøren om data fra Clustered Index Scan. Clustered Index Scan returnerer rækkerne fra tabellen [Sales].[SalesOrderDetail], der opfylder Hvor klausul betingelse.

I tilfælde af at flere filialer smelter sammen i en udførelsesplan, skal du følge højre mod venstre, top til bund tilgang.

Operatoromkostninger

Hver operatør i en SQL Server-udførelsesplan er forbundet med en omkostning. Driftsomkostningerne er i forhold til øvrige omkostninger i udførelsesplanen. Normalt skal vi koncentrere os om den dyre operatør og justere forespørgslen omkring den.

I tilfælde af en kompliceret udførelsesplan kan det være udfordrende at identificere den dyre operatør. I dette tilfælde kan du bruge SET SHOWPLAN_ALL ON, og det vil give oplysninger i et tabelformat.

Du kan også bruge [Stmt-teksten] til at nedbryde udførelsesplanen på hvert operatør- og erklæringsniveau.

SQL Server Management Studio (SSMS) giver også fleksibiliteten til at finde en operatør baseret på søgekriterier. For at gøre dette skal du højreklikke på udførelsesplanen og vælge Find node. Dette åbner et vindue med forskellige søgebetingelser. Angiv dit krav, og det vil pege på den bestemte node, som vist nedenfor.

Alternativt kan du bruge Azure Data Studio og navigere til Kør aktuel forespørgsel med faktisk plan  under kommandopaletten. Dette giver en faktisk udførelsesplan i en kompakt form, sammen med de øverste operationer for hurtigt at identificere dyre operatører.

Showplan-analyse

Du kan identificere et unøjagtigt kardinalitetsestimat for at undersøge problematiske eksekveringsplaner. Dette vil give dig kort information om at finde en bestemt operatør og anbefalinger på fanen ShowPlan Analysis. Du kan sortere resultatet i differens-, faktiske og estimerede kolonner for at finde problemet og anbefalingerne for den specifikke operatør i udførelsesplanen. Dette er tilgængeligt fra SSMS 17.4.

For at gøre dette skal du blot højreklikke på udførelsesplanen og derefter klikke på Analyser den faktiske udførelsesplan.

Klik derefter på hyperlinket under Find detaljer . Dette vil forklare de mulige scenarier for estimeringsunøjagtighed og løsninger for at forbedre disse estimater. Det er et godt udgangspunkt for problemer med estimering af kardinalitet.

Sammenlign Showplan

Antag, at du har identificeret et problem i udførelsesplanen og du implementerede en løsning til at afhjælpe det. Men hvordan vil du sammenligne den tidligere eksekveringsplan (hvordan den var før implementering af løsningen) og den nuværende eksekveringsplan? SSMS Compare Showplan funktion giver dig fleksibiliteten til at sammenligne to udførelsesplaner. Det fremhæver lighederne og forskellene mellem disse planer.

Normalt får DBA'er et opkald fra udviklere om, at en bestemt forespørgsel fungerer fint i produktionen, men at den tager lang tid i et QA-miljø med de samme parametre. Et andet use case er migrering til en nyere version af SQL Server. Antag, at du efter migreringen står over for problemer med en forespørgsel, der fungerer fint i en lavere SQL-version. Du kan også bruge dette værktøj til at sammenligne eksekveringsplaner for forskellige SQL-versioner og patch-niveauer.

Gem udførelsesplanen i et SQLPlan udvidelse. Derefter kan du højreklikke på en anden eksekveringsplan og vælge Sammenlign Showplan .

Live eksekveringsplaner i SSMS

Du kan aktivere en live eksekveringsplan for en aktiv forespørgsel. Dette vil give dig statistik i realtid om datastrømmen til forskellige operatører. I køretidsudførelsesstatistikken kan du spore den forløbne tid og antallet af rækker. Det er en fremragende funktion til fejlfinding og fejlfinding af ydeevneproblemer. Du kan bruge live forespørgselsstatistik fra SQL Server 2016 og nyere.

Bemærk:Du skal bruge den seneste version af SSMS. Se Microsoft-dokumenter for at downloade den seneste version af SSMS.

  • Aktuel seneste version:SSMS 18.7.1

Aktiver Inkluder statistik for live-forespørgsler for at få vist statistik for liveforespørgsler ved hjælp af SSMS-værktøjslinjen.

Du kan også se live-udførelsesplanen fra Activity Monitor . I aktivitetsovervågningen skal du vælge den ønskede proces, højreklikke på den for at se menuen og vælge Vis plan for live-udførelse.

Dette giver dig live forespørgselsestimater sammen med dataflow og fuldførelsesprocenter for individuelle operatører. Normalt venter vi på, at forespørgselsudførelsen er færdig og ser den faktiske udførelsesplan. Men antag, at din forespørgsel tager mere end 30 minutter at producere resultater. I dette tilfælde kan du bruge live forespørgselsstatistik til at spore individuelle operatører, dataflow og påpege, hvilken operatør der tager tid at fuldføre forespørgslen. For eksempel, som vist nedenfor, kører forespørgslen i 12 minutter og 48 sekunder, og forespørgslen anslås at være 20 % fuldført. På operatørniveau er indeksscanningen og rækketællingsspolen 41 % fuldført. De stiplede linjer viser databevægelsen.

Gennemgang af brugen af ​​SQL Server-udførelsesplan

SQL Server-udførelsesplaner er utrolig nyttige til fejlfinding og optimering af langsomme forespørgsler. Enhver databaseprofessionel skal vide, hvordan man analyserer og forstår oplysningerne, når udførelsesplanen bliver tilgængelig. Som beskrevet tidligere er der forskellige værktøjer i SSMS og Azure Data Studio til at hjælpe dig med at gennemgå og løse ydeevneproblemer – funktionen Sammenlign plan er især en, du kan drage fordel af, når du begynder at foretage ændringer og vurdere ydeevnen.


  1. MySQL - Betydning af PRIMÆR NØGLE, UNIK NØGLE og NØGLE, når de bruges sammen under oprettelse af en tabel

  2. Hvordan starter man MySQL med --skip-grant-tables?

  3. Hvordan opretter jeg forbindelse til PostgreSQL uden at angive et databasenavn?

  4. Simuler ORDER BY i SQLite UPDATE for at håndtere entydighedsbegrænsning