sql >> Database >  >> RDS >> Sqlserver

Hoe krijg ik een Query Execution Plan in SQL Server?

Er zijn een aantal methoden om een ​​uitvoeringsplan te verkrijgen, welke u moet gebruiken, hangt af van uw omstandigheden. Meestal kunt u SQL Server Management Studio gebruiken om een ​​plan te krijgen, maar als u om de een of andere reden uw query niet in SQL Server Management Studio kunt uitvoeren, kan het handig zijn om een ​​plan te verkrijgen via SQL Server Profiler of door te inspecteren de plancache.

Methode 1 - SQL Server Management Studio gebruiken

SQL Server wordt geleverd met een aantal handige functies die het heel gemakkelijk maken om een ​​uitvoeringsplan vast te leggen, zorg er gewoon voor dat het menu-item "Include Actual Execution Plan" (te vinden onder het menu "Query") is aangevinkt en voer uw query uit zoals normaal .

Als u het uitvoeringsplan voor instructies in een opgeslagen procedure probeert te verkrijgen, moet u de opgeslagen procedure als volgt uitvoeren:

exec p_Example 42

Wanneer uw zoekopdracht is voltooid, zou u een extra tabblad met de titel "Uitvoeringsplan" moeten zien verschijnen in het resultatenvenster. Als u veel overzichten heeft uitgevoerd, ziet u mogelijk veel plannen op dit tabblad.

Vanaf hier kunt u het uitvoeringsplan in SQL Server Management Studio inspecteren, of klik met de rechtermuisknop op het plan en selecteer "Uitvoeringsplan opslaan als ..." om het plan op te slaan in een bestand in XML-indeling.

Methode 2 - SHOWPLAN-opties gebruiken

Deze methode lijkt erg op methode 1 (in feite is dit wat SQL Server Management Studio intern doet), maar ik heb het voor de volledigheid toegevoegd of als je geen SQL Server Management Studio beschikbaar hebt.

Voer één . uit voordat u uw zoekopdracht uitvoert van de volgende uitspraken. De instructie moet de enige instructie in de batch zijn, d.w.z. u kunt niet tegelijkertijd een andere instructie uitvoeren:

SET SHOWPLAN_TEXT ON
SET SHOWPLAN_ALL ON
SET SHOWPLAN_XML ON
SET STATISTICS PROFILE ON
SET STATISTICS XML ON -- The is the recommended option to use

Dit zijn verbindingsopties en u hoeft dit dus maar één keer per verbinding uit te voeren. Vanaf dit punt zullen alle uitgevoerde statements vergezeld gaan van een aanvullende resultatenset met uw uitvoeringsplan in het gewenste formaat - voer uw zoekopdracht gewoon uit zoals u normaal zou doen om het plan te zien.

Als u klaar bent, kunt u deze optie uitschakelen met de volgende verklaring:

SET <<option>> OFF

Vergelijking van uitvoeringsplanformaten

Tenzij je een sterke voorkeur hebt, raad ik aan om de STATISTICS XML . te gebruiken optie. Deze optie is gelijk aan de optie "Include Actual Execution Plan" in SQL Server Management Studio en levert de meeste informatie in de handigste indeling.

  • SHOWPLAN_TEXT - Toont een op tekst gebaseerd geschat uitvoeringsplan, zonder de zoekopdracht uit te voeren
  • SHOWPLAN_ALL - Toont een op tekst gebaseerd geschat uitvoeringsplan met kostenramingen, zonder de query uit te voeren
  • SHOWPLAN_XML - Toont een op XML gebaseerd geschat uitvoeringsplan met kostenramingen, zonder de query uit te voeren. Dit komt overeen met de optie "Geschat uitvoeringsplan weergeven..." in SQL Server Management Studio.
  • STATISTICS PROFILE - Voert de query uit en geeft een op tekst gebaseerd daadwerkelijk uitvoeringsplan weer.
  • STATISTICS XML - Voert de query uit en geeft een op XML gebaseerd actueel uitvoeringsplan weer. Dit komt overeen met de optie "Include Actual Execution Plan" in SQL Server Management Studio.

Methode 3 - SQL Server Profiler gebruiken

Als u uw query niet rechtstreeks kunt uitvoeren (of als uw query niet langzaam wordt uitgevoerd wanneer u deze rechtstreeks uitvoert - onthoud dat we een plan willen van de query die slecht presteert), dan kunt u een plan vastleggen met behulp van een SQL Server Profiler-tracering. Het idee is om uw query uit te voeren terwijl een tracering die een van de "Showplan"-gebeurtenissen vastlegt, wordt uitgevoerd.

Houd er rekening mee dat u, afhankelijk van de belasting, kunt gebruik deze methode in een productieomgeving, maar u moet uiteraard voorzichtig zijn. De profileringsmechanismen van SQL Server zijn ontworpen om de impact op de database te minimaliseren, maar dit betekent niet dat er geen geen zal zijn. invloed op de prestaties. U kunt ook problemen hebben met het filteren en identificeren van het juiste plan in uw trace als uw database intensief wordt gebruikt. Je moet natuurlijk contact opnemen met je DBA om te zien of ze er blij mee zijn dat je dit doet in hun kostbare database!

  1. Open SQL Server Profiler en maak een nieuwe tracering die verbinding maakt met de gewenste database waarmee u de tracering wilt vastleggen.
  2. Vink op het tabblad "Evenementenselectie" de optie "Alle gebeurtenissen weergeven" aan, vink de rij "Prestaties" -> "Showplan XML" aan en voer de tracering uit.
  3. Terwijl de tracering wordt uitgevoerd, doet u wat u moet doen om de langzaam lopende query uit te voeren.
  4. Wacht tot de zoekopdracht is voltooid en stop de tracering.
  5. Om de tracering op te slaan, klikt u met de rechtermuisknop op de xml van het plan in SQL Server Profiler en selecteert u "Eventgegevens uitpakken..." om het plan in XML-indeling op te slaan in een bestand.

Het plan dat u krijgt is gelijk aan de optie "Include Actual Execution Plan" in SQL Server Management Studio.

Methode 4 - De querycache inspecteren

Als u uw query niet rechtstreeks kunt uitvoeren en ook geen profiler-tracering kunt vastleggen, kunt u nog steeds een geschat plan verkrijgen door de cache van het SQL-queryplan te inspecteren.

We inspecteren de plancache door SQL Server DMV's op te vragen. Het volgende is een basisquery die alle in de cache opgeslagen queryplannen (als xml) samen met hun SQL-tekst weergeeft. In de meeste databases moet u ook aanvullende filterclausules toevoegen om de resultaten te filteren tot alleen de plannen waarin u geïnteresseerd bent.

SELECT UseCounts, Cacheobjtype, Objtype, TEXT, query_plan
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
CROSS APPLY sys.dm_exec_query_plan(plan_handle)

Voer deze query uit en klik op de plan-XML om het plan in een nieuw venster te openen - klik met de rechtermuisknop en selecteer "Uitvoeringsplan opslaan als..." om het plan op te slaan als bestand in XML-formaat.

Opmerkingen:

Omdat er zoveel factoren bij betrokken zijn (variërend van de tabel en het indexschema tot de opgeslagen gegevens en de tabelstatistieken), moet u altijd probeer een uitvoeringsplan te verkrijgen uit de database waarin u geïnteresseerd bent (normaal gesproken degene die een prestatieprobleem ondervindt).

U kunt geen uitvoeringsplan vastleggen voor versleutelde opgeslagen procedures.

"werkelijke" versus "geschatte" uitvoeringsplannen

Een echte uitvoeringsplan is er een waarbij SQL Server de query daadwerkelijk uitvoert, terwijl een geschatte uitvoeringsplan SQL Server werkt uit wat het zou doen zonder de query uit te voeren. Hoewel logisch equivalent, is een daadwerkelijk uitvoeringsplan veel nuttiger omdat het aanvullende details en statistieken bevat over wat er werkelijk is gebeurd bij het uitvoeren van de query. Dit is essentieel bij het diagnosticeren van problemen waarbij de schattingen van SQL Servers niet kloppen (zoals wanneer de statistieken verouderd zijn).

  • Geschat en feitelijk uitvoeringsplan herzien

Hoe interpreteer ik een plan voor het uitvoeren van query's?

Dit is een onderwerp dat op zichzelf al een (gratis) boek waard is.

Zie ook:

  • Basisbeginselen van het uitvoeringsplan
  • SHOWPLAN-toestemming en Transact-SQL-batches
  • SQL Server 2008 – Query-hashes en Queryplan-hashes gebruiken
  • De SQL Server Plan-cache analyseren


  1. Aankondiging van ondersteuning voor MariaDB 10.2 - ClusterControl 1.5

  2. Hoe PERIOD_ADD() werkt in MariaDB

  3. Een databasediagram maken in MySQL Workbench

  4. Wanneer moet ik MySQLi gebruiken in plaats van MySQL?