Delen via


sys.dm_exec_query_plan_stats (Transact-SQL)

Van toepassing op: SQL Server 2019 (15.x) Azure SQL DatabaseAzure SQL Managed Instance

Retourneert het equivalent van het laatst bekende werkelijke uitvoeringsplan voor een eerder in de cache opgeslagen queryplan.

Syntaxis

sys.dm_exec_query_plan_stats ( plan_handle )

Arguments

plan_handle

Een token dat een queryuitvoeringsplan op unieke wijze identificeert voor een batch die is uitgevoerd en het bijbehorende plan zich in de plancache bevindt of momenteel wordt uitgevoerd. plan_handle is varbinary(64).

De plan_handle kan worden verkregen uit de volgende dynamische beheerobjecten:

Tabel geretourneerd

Kolomnaam Gegevenstype Description
dbid smallint Id van de contextdatabase die van kracht was toen de Transact-SQL instructie die overeenkomt met dit plan werd gecompileerd. Voor ad-hoc en voorbereide SQL-instructies, de id van de database waarin de instructies zijn gecompileerd.

Kolom is null-waarde.
objectid int Id van het object (bijvoorbeeld opgeslagen procedure of door de gebruiker gedefinieerde functie) voor dit queryplan. Voor ad-hoc- en voorbereide batches is deze kolom null.

Kolom is null-waarde.
number smallint Genummerde opgeslagen procedure geheel getal. Een groep procedures voor de toepassing kan bijvoorbeeld een orders naam orderproc;1hebben, orderproc;2enzovoort. Voor ad-hoc- en voorbereide batches is deze kolom null.

Kolom is null-waarde.
encrypted bit Geeft aan of de bijbehorende opgeslagen procedure is versleuteld.

0 = niet versleuteld
1 = versleuteld

Kolom kan niet null worden.
query_plan xml Bevat de laatst bekende showplan-weergave van het werkelijke uitvoeringsplan voor query's dat is opgegeven met plan_handle. Showplan heeft een XML-indeling. Er wordt één plan gegenereerd voor elke batch die bijvoorbeeld ad hoc Transact-SQL instructies, opgeslagen procedureaanroepen en door de gebruiker gedefinieerde functieaanroepen bevat.

Kolom is null-waarde.

Opmerkingen

Dit is een opt-in-functie. Als u op serverniveau wilt inschakelen, gebruikt u traceringsvlag 2451. Als u wilt inschakelen op databaseniveau, gebruikt u de LAST_QUERY_PLAN_STATS optie IN ALTER DATABASE SCOPED CONFIGURATION.

Deze systeemfunctie werkt onder de lichtgewicht profileringsinfrastructuur voor queryuitvoeringsstatistieken. Voor meer informatie, zie Infrastructuur voor queryprofilering.

De Showplan-uitvoer door sys.dm_exec_query_plan_stats bevat de volgende informatie:

  • Alle gecompileerde tijdgegevens in het in de cache opgeslagen plan

  • Runtime-informatie zoals het werkelijke aantal rijen per operator, de totale cpu-tijd en uitvoeringstijd van de query, waarschuwingen overlopen, werkelijke DOP, het maximaal gebruikte geheugen en het toegewezen geheugen

Onder de volgende voorwaarden wordt een Showplan-uitvoer geretourneerd die gelijk is aan een daadwerkelijk uitvoeringsplan in de query_plan kolom van de geretourneerde tabel voor sys.dm_exec_query_plan_stats:

Onder de volgende voorwaarden wordt een vereenvoudigde1 Showplan-uitvoer geretourneerd in de query_plan kolom van de geretourneerde tabel voor sys.dm_exec_query_plan_stats:

  • Het plan vindt u in sys.dm_exec_cached_plans.

    en

  • De query is eenvoudig genoeg, meestal gecategoriseerd als onderdeel van een OLTP-workload.

1 Verwijst naar een Showplan dat alleen de operator van het hoofdknooppunt (SELECT) bevat.

Onder de volgende voorwaarden wordt geen uitvoer geretourneerd van sys.dm_exec_query_plan_stats:

  • Het queryplan dat is opgegeven door gebruik te gebruiken plan_handle , is verwijderd uit de plancache.

    or

  • Het queryplan was in de eerste plaats niet in de cache opgeslagen. Zie Opslaan in cache en hergebruik van uitvoeringsplan voor meer informatie.

Opmerking

Een beperking in het aantal geneste niveaus dat is toegestaan in het XML-gegevenstype , betekent dat queryplannen die sys.dm_exec_query_plan voldoen aan of groter zijn dan 128 niveaus van geneste elementen, niet kunnen retourneren. In eerdere versies van SQL Server heeft deze voorwaarde voorkomen dat het queryplan retourneert en fout 6335 genereert. In SQL Server 2005 (9.x) Service Pack 2 en latere versies retourneert query_plande NULL kolom .

Permissions

SQL Server 2019 (15.x) en eerdere versies vereisen VIEW SERVER STATE toestemming op de server.

VOOR SQL Server 2022 (16.x) en latere versies is machtiging vereist VIEW SERVER PERFORMANCE STATE op de server.

Voorbeelden

Eén. Bekijk het laatst bekende werkelijke queryuitvoeringsplan voor een specifiek in de cache opgeslagen plan

In het volgende voorbeeld worden query's uitgevoerd sys.dm_exec_cached_plans om het interessante plan te vinden en deze uit de uitvoer te kopiëren plan_handle .

SELECT * FROM sys.dm_exec_cached_plans;
GO

Als u vervolgens het laatst bekende werkelijke queryuitvoeringsplan wilt ophalen, gebruikt u de gekopieerde plan_handle met de systeemfunctie sys.dm_exec_query_plan_stats.

SELECT * FROM sys.dm_exec_query_plan_stats(< copied plan_handle >);
GO

B. Bekijk het laatst bekende werkelijke queryuitvoeringsplan voor alle in de cache opgeslagen plannen

SELECT * FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps;
GO

C. Bekijk het laatst bekende werkelijke queryuitvoeringsplan voor een specifiek plan in de cache en querytekst

SELECT * FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps
WHERE st.text LIKE 'SELECT * FROM Person.Person%';
GO

D. Bekijk gebeurtenissen in de cache voor trigger

SELECT * FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle)
WHERE objtype = 'Trigger';
GO