sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man läser och analyserar SQL Server-exekveringsplaner

SQL Server-exekveringsplaner är en gateway för frågeoptimerare och frågekörningar för databasproffs. De avslöjar frågebehandling och involverade faser som påverkade tabeller, index, statistik, typer av kopplingar, antalet berörda rader, frågebehandling, datasortering och datahämtning.

I en tidigare artikel, SQL Server Execution Plan — Vad är det och hur hjälper det med prestandaproblem? vi utforskade arbetsflödet för exekvering av frågor på hög nivå, de olika typerna av exekveringsplaner (grafiskt, XML och text), tillsammans med faktiska och beräknade exekveringsplaner.

Nu ska vi utforska saker du behöver veta när du utvärderar SQL Server-exekveringsplaner och hur du bäst tolkar informationen.

Läser en grafisk SQL Server-exekveringsplan

I allmänhet läser vi utförandeplaner från höger till vänster. Du börjar med den överst till höger längst upp till höger och rör dig åt vänster. Det hjälper dig att följa det logiska dataflödet i frågan.

Anta att du kör följande fråga i en exempeldatabas [AdventureWorks2019] och visar den faktiska genomförandeplanen.

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

Frågan hämtar data från tabellen [Sales].[SalesOrderDetail] för beställningar med ett enhetspris som är högre än 1 000.

Om vi ​​läser genomförandeplanen från höger till vänster, kommer vi att notera följande:

  • Den första operatorn är Clustered Index Scan som läser data från tabellen [Sales].[SalesOrderDetail]. När du tar med muspekaren till pilen som förbinder Clustered Index Scan och Top operatorn returnerar den det uppskattade och faktiska antalet rader och uppskattad datastorlek.

  • Den skickar data från Clustered Index Scan-operatorn till Top-operatorn skickar de 10 raderna till SELECT-operatorn.

Internt exekverar SQL Server planen från vänster till höger. Om du är intresserad av operatörens fysiska order bör du läsa en utförandeplan från vänster till höger. Varje operatör begär data från nästa operatör. Till exempel, i ovanstående scenario, begär Top-operatören data från Clustered Index Scan. Clustered Index Scan returnerar raderna från tabellen [Sales].[SalesOrderDetail] som uppfyller Where klausulvillkor.

I händelse av att flera grenar slås samman i en utförandeplan bör du följa höger till vänster, uppifrån och ned.

Operatörskostnader

Varje operatör i en SQL Server-exekveringsplan är associerad med en kostnad. Operatörskostnaden är i förhållande till övriga kostnader i genomförandeplanen. Vanligtvis måste vi koncentrera oss på den kostsamma operatören och justera frågan runt den.

I händelse av en komplicerad genomförandeplan kan det vara utmanande att identifiera den kostsamma operatören. I det här fallet kan du använda SET SHOWPLAN_ALL ON, och det kommer att tillhandahålla information i tabellformat.

Du kan också använda [Stmt-text] för att bryta ner exekveringsplanen på varje operatörs- och uttalandenivå.

SQL Server Management Studio (SSMS) ger också flexibiliteten att hitta en operatör baserat på sökkriterier. För att göra detta högerklickar du på exekveringsplanen och väljer Hitta nod. Detta öppnar ett fönster med olika sökvillkor. Ange ditt krav, så kommer det att peka på den specifika noden, som visas nedan.

Alternativt kan du använda Azure Data Studio och navigera till Kör aktuell fråga med faktisk plan  under kommandopaletten. Detta ger en verklig utförandeplan i en kompakt form, tillsammans med de bästa operationerna för att snabbt identifiera kostsamma operatörer.

Showplan-analys

Du kan identifiera en felaktig kardinalitetsuppskattning för att undersöka problematiska genomförandeplaner. Detta ger dig kort information om hur du hittar en viss operatör och rekommendationer på fliken ShowPlan Analysis. Du kan sortera resultatet i kolumnerna skillnad, faktisk och uppskattad för att hitta problemet och rekommendationerna för den specifika operatören i utförandeplanen. Detta är tillgängligt från SSMS 17.4.

För att göra detta, högerklicka bara på exekveringsplanen och klicka sedan på Analysera den faktiska exekveringsplanen.

Klicka sedan på hyperlänken under Hitta information . Detta kommer att förklara möjliga scenarier för uppskattningsfel och lösningar för att förbättra dessa uppskattningar. Det är en bra utgångspunkt för problem med uppskattning av kardinalitet.

Jämför Showplan

Anta att du identifierade ett problem i exekveringsplanen och du implementerade en lösning för att åtgärda det. Men hur kommer du att jämföra den tidigare genomförandeplanen (hur den var innan lösningen implementerades) och den nuvarande genomförandeplanen? SSMS Compare Showplan funktionen ger dig flexibiliteten att jämföra två genomförandeplaner. Den belyser likheterna och skillnaderna mellan dessa planer.

Vanligtvis får DBA:er ett samtal från utvecklare att en viss fråga fungerar bra i produktionen men tar lång tid i en QA-miljö med samma parametrar. Ett annat användningsfall är att migrera till en nyare version av SQL Server. Anta att du efter migreringen möter problem med en fråga som fungerar bra i en lägre SQL-version. Du kan också använda det här verktyget för att jämföra exekveringsplaner för olika SQL-versioner och patchnivåer.

Spara exekveringsplanen i ett SQLPlan förlängning. Efter det kan du högerklicka på en annan exekveringsplan och välja Jämför Showplan .

Direktutförandeplaner i SSMS

Du kan aktivera en live-exekveringsplan för en aktiv fråga. Detta ger dig realtidsstatistik om dataflödet till olika operatörer. I körtidsstatistiken kan du spåra förfluten tid och antal rader. Det är en utmärkt funktion för felsökning och felsökning av prestandaproblem. Du kan använda statistik från SQL Server 2016 och senare.

Obs:Du bör använda den senaste versionen av SSMS. Se Microsoft-dokument för att ladda ner den senaste versionen av SSMS.

  • Nuvarande senaste version:SSMS 18.7.1

Aktivera Inkludera statistik för livefrågeställningar för statistik för livefrågefrågor med hjälp av SSMS-verktygsfältet.

Du kan också se verkställighetsplanen från Activity Monitor . I Activity Monitor, välj önskad process, högerklicka på den för att visa menyn och välj Visa Live Execution Plan.

Detta ger dig uppskattningar av frågor i realtid tillsammans med dataflödet och slutförandeprocenter för enskilda operatörer. Vanligtvis väntar vi på att frågekörningen ska avslutas och ser den faktiska exekveringsplanen. Men anta att din fråga tar mer än 30 minuter att ge resultat. I det här fallet kan du använda direkt frågestatistik för att spåra enskilda operatörer, dataflöde och peka ut vilken operatör som tar tid att slutföra frågan. Till exempel, som visas nedan, körs frågan i 12 minuter och 48 sekunder, och frågan beräknas till 20 % slutförd. På operatörsnivå är indexavsökningen och radräkningsspolen 41 % klara. De streckade linjerna visar datarörelsen.

Granska användningen av SQL Server exekveringsplan

SQL Server-exekveringsplaner är otroligt användbara för att felsöka och optimera långsamma frågor. Varje databasexpert behöver veta hur man analyserar och förstår informationen när genomförandeplanen blir tillgänglig. Som tidigare nämnts finns det olika verktyg i SSMS och Azure Data Studio som hjälper dig att granska och lösa prestandaproblem – funktionen Jämför plan är speciellt en att dra nytta av när du börjar göra ändringar och utvärdera prestanda.


  1. SQL WHERE Flera villkor

  2. Arbeta med ODBC-data i DbVisualizer

  3. FEL:funktioner i indexuttryck måste markeras IMMUTABEL i Postgres

  4. Hämta uppgifterna från förra månaden i SQL-servern