sql >> Database >  >> RDS >> Sqlserver

Uitvoeringsplannen voor SQL Server lezen en analyseren

Uitvoeringsplannen voor SQL Server zijn een gateway voor het optimaliseren van query's en het uitvoeren van query's voor databaseprofessionals. Ze onthullen de verwerking van zoekopdrachten en de betrokken fasen, zoals betrokken tabellen, indexen, statistieken, typen samenvoegingen, het aantal betrokken rijen, verwerking van zoekopdrachten, het sorteren van gegevens en het ophalen van gegevens.

In een vorig artikel, SQL Server Execution Plan - Wat is het en hoe helpt het bij prestatieproblemen? we hebben de workflow voor het uitvoeren van query's op hoog niveau onderzocht, de verschillende soorten uitvoeringsplannen (grafisch, XML en tekst), samen met de werkelijke en geschatte uitvoeringsplannen.

Nu gaan we dingen onderzoeken die u moet weten bij het evalueren van uitvoeringsplannen voor SQL Server en hoe u de informatie het beste kunt interpreteren.

Een grafisch uitvoeringsplan voor SQL Server lezen

Over het algemeen lezen we uitvoeringsplannen van rechts naar links. U begint met de meest rechtse uitvoeringsplanoperator en gaat naar links. Het helpt u de logische gegevensstroom in de query te volgen.

Stel dat u de volgende query uitvoert in een voorbeelddatabase van [AdventureWorks2019] en het daadwerkelijke uitvoeringsplan bekijkt.

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

De query haalt gegevens op uit de tabel [Sales].[SalesOrderDetail] voor bestellingen met een eenheidsprijs hoger dan 1.000.

Als we het uitvoeringsplan van rechts naar links lezen, merken we het volgende op:

  • De eerste operator is de Clustered Index Scan die gegevens uit de tabel [Sales].[SalesOrderDetail] leest. Wanneer u uw muisaanwijzer naar de pijl brengt die de operator voor geclusterde indexscan en Top-operator verbindt, wordt het geschatte en werkelijke aantal rijen en de geschatte gegevensgrootte geretourneerd.

  • Het geeft gegevens door van de operator Clustered Index Scan naar de operator Top en geeft de 10 rijen door aan de operator SELECT.

Intern voert SQL Server het plan van links naar rechts uit. Als u geïnteresseerd bent in de fysieke orders van de operator, moet u een uitvoeringsplan van links naar rechts lezen. Elke operator vraagt ​​gegevens op bij de volgende operator. In het bovenstaande scenario vraagt ​​de Top-operator bijvoorbeeld gegevens op uit de Clustered Index Scan. De geclusterde indexscan retourneert de rijen uit de tabel [Sales].[SalesOrderDetail] die voldoen aan de Waar clausule voorwaarde.

In het geval dat meerdere branches samenkomen in een uitvoeringsplan, moet u de benadering van rechts naar links, van boven naar beneden volgen.

Operatorkosten

Aan elke operator in een uitvoeringsplan voor SQL Server zijn kosten verbonden. De operatorkosten zijn relatief ten opzichte van andere kosten in het uitvoeringsplan. Gewoonlijk moeten we ons concentreren op de kostbare operator en de zoekopdracht daaromheen afstemmen.

In het geval van een ingewikkeld uitvoeringsplan kan het een uitdaging zijn om de kostbare operator te identificeren. In dit geval kunt u SET SHOWPLAN_ALL ON, . gebruiken en het geeft informatie in tabelvorm.

U kunt ook de [Stmt-tekst] gebruiken om het uitvoeringsplan op elk operator- en instructieniveau op te splitsen.

SQL Server Management Studio (SSMS) biedt ook de flexibiliteit om een ​​operator te vinden op basis van zoekcriteria. Klik hiervoor met de rechtermuisknop op het uitvoeringsplan en selecteer Find Node. Dit opent een venster met verschillende zoekvoorwaarden. Specificeer uw vereiste, en het zal verwijzen naar het specifieke knooppunt, zoals hieronder weergegeven.

U kunt ook Azure Data Studio gebruiken en navigeren naar Huidige query uitvoeren met actueel abonnement  onder het Commando-palet. Dit geeft een daadwerkelijk uitvoeringsplan in een compacte vorm, samen met de Top-operaties om snel dure operators te identificeren.

Showplan-analyse

U kunt een onjuiste kardinaliteitsschatting identificeren om problematische uitvoeringsplannen te onderzoeken. Dit geeft u korte informatie over het vinden van een bepaalde operator en aanbevelingen op het tabblad ShowPlan Analysis. U kunt het resultaat sorteren in de kolommen verschil, werkelijke en geschatte om het probleem en aanbevelingen voor de specifieke operator in het uitvoeringsplan te vinden. Dit is beschikbaar vanaf SSMS 17.4.

Klik hiervoor met de rechtermuisknop op het uitvoeringsplan en klik vervolgens op Het werkelijke uitvoeringsplan analyseren.

Klik vervolgens op de hyperlink onder Details zoeken . Dit verklaart de mogelijke scenario's voor onnauwkeurigheid van schattingen en tijdelijke oplossingen om deze schattingen te verbeteren. Het is een goed startpunt voor problemen met kardinaliteitsschattingen.

Vergelijk Showplan

Stel dat u een probleem heeft geïdentificeerd in het uitvoeringsplan en u heeft een oplossing geïmplementeerd om dit op te lossen. Maar hoe vergelijkt u het vorige uitvoeringsplan (zoals het was voordat de oplossing werd geïmplementeerd) en het huidige uitvoeringsplan? Het SSMS Vergelijk Showplan functie geeft u de flexibiliteit om twee uitvoeringsplannen te vergelijken. Het benadrukt de overeenkomsten en verschillen tussen deze plannen.

Gewoonlijk krijgen DBA's een telefoontje van ontwikkelaars dat een bepaalde query goed werkt in productie, maar lang duurt in een QA-omgeving met dezelfde parameters. Een andere use case is het migreren naar een nieuwere versie van SQL Server. Stel dat u na de migratie problemen ondervindt met een query die prima werkt in een lagere SQL-versie. U kunt deze tool ook gebruiken om uitvoeringsplannen van verschillende SQL-versies en patchniveaus te vergelijken.

Sla het uitvoeringsplan op in een SQLPlan verlenging. Daarna kunt u met de rechtermuisknop op een ander uitvoeringsplan klikken en Showplan vergelijken . selecteren .

Live uitvoeringsplannen in SSMS

U kunt een live uitvoeringsplan van een actieve query inschakelen. Dit geeft u realtime statistieken over de gegevensstroom naar verschillende operators. In de runtime-uitvoeringsstatistieken kunt u de verstreken tijd en het aantal rijen volgen. Het is een uitstekende functie voor het oplossen van problemen en het debuggen van prestatieproblemen. U kunt live-querystatistieken van SQL Server 2016 en hoger gebruiken.

Opmerking:u moet de nieuwste versie van SSMS gebruiken. Raadpleeg Microsoft-documenten om de nieuwste versie van SSMS te downloaden.

  • Huidige nieuwste versie:SSMS 18.7.1

Schakel voor live zoekopdrachtstatistieken Inclusief live zoekopdrachtstatistieken in met behulp van de SSMS-werkbalk.

U kunt het live uitvoeringsplan ook bekijken vanuit de Activiteitsmonitor . Selecteer in de Activity Monitor het gewenste proces, klik er met de rechtermuisknop op om het menu te bekijken en kies Live Execution Plan weergeven.

Dit geeft u live query-schattingen samen met gegevensstroom en voltooiingspercentages van individuele operators. Gewoonlijk wachten we tot de uitvoering van de query is voltooid en bekijken we het daadwerkelijke uitvoeringsplan. Maar stel dat uw zoekopdracht meer dan 30 minuten duurt om resultaten te produceren. In dit geval kunt u live querystatistieken gebruiken om individuele operators en gegevensstromen te volgen en aan te geven welke operator de tijd neemt om de query te voltooien. Zoals hieronder wordt weergegeven, wordt de query bijvoorbeeld 12 minuten en 48 seconden uitgevoerd en wordt de query naar schatting voor 20% voltooid. Op operatorniveau zijn de indexscan en de rijtellingspoel voor 41% voltooid. De stippellijnen geven de gegevensbeweging weer.

Het gebruik van het uitvoeringsplan van SQL Server bekijken

Uitvoeringsplannen voor SQL Server zijn ongelooflijk handig bij het oplossen van problemen en het optimaliseren van langzame query's. Elke databaseprofessional moet weten hoe hij de informatie moet analyseren en begrijpen zodra het uitvoeringsplan beschikbaar is. Zoals eerder besproken, zijn er verschillende hulpprogramma's in SSMS en Azure Data Studio om u te helpen prestatieproblemen te beoordelen en op te lossen. Vooral de functie Plan vergelijken is er een om van te profiteren wanneer u begint met het aanbrengen van wijzigingen en het beoordelen van de prestaties.


  1. Is er een ANSI SQL-alternatief voor het sleutelwoord MYSQL LIMIT?

  2. Equivalent van MySQL OP DUPLICATE KEY UPDATE in Sql Server

  3. Een cluster-naar-cluster-replicatie configureren voor Percona XtraDB-cluster of MariaDB-cluster

  4. Een database-e-mailaccount verwijderen in SQL Server (T-SQL)