Share via


sys.dm_exec_cached_plans (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform Systeem (PDW)SQL-database in Microsoft Fabric

Geeft een rij terug voor elk queryplan die door SQL Server wordt gecachet voor snellere query-uitvoering. Je kunt deze dynamische beheerweergave gebruiken om gecachte queryplannen, gecachte querytekst, de hoeveelheid geheugen die door gecachte plannen wordt gebruikt en het hergebruikaantal van de gecachte plannen te vinden.

In Azure SQL Database kunnen dynamische beheerweergaven geen informatie weergeven die van invloed is op databaseinsluiting of informatie weergeven over andere databases waartoe de gebruiker toegang heeft. Om te voorkomen dat deze informatie zichtbaar wordt gemaakt, wordt elke rij met gegevens die geen deel uitmaken van de verbonden tenant uitgefilterd. Bovendien worden de waarden in de kolommen memory_object_address en pool_id gefilterd; de kolomwaarde is ingesteld op NULL.

Opmerking

Gebruik de naam sys.dm_pdw_nodes_exec_cached_plansom dit aan te roepen vanuit Azure Synapse Analytics of Analytics Platform System (PDW). Deze syntaxis wordt niet ondersteund door een serverloze SQL-pool in Azure Synapse Analytics.

Kolomnaam Gegevenstype Description
bucketid int ID van de hash bucket waarin de invoer wordt gecachet. De waarde geeft een bereik aan van 0 tot de hashtabelgrootte voor het type cache.

Voor de caches van SQL-plannen en objectplannen kan de grootte van de hashtabel maximaal 10.007 zijn op 32-bits systemen en maximaal 40.009 op 64-bits systemen. Voor de Bound Trees-cache kan de grootte van de hash-tabel maximaal 1009 zijn op 32-bits systemen en maximaal 4001 op 64-bits systemen. Voor de Extended Stored Procedures-cache kan de hashtabel tot 127 zijn op 32-bits en 64-bit systemen.
refcounts int Aantal cacheobjecten die naar dit cacheobject verwijzen. refcounts moet ten minste 1 zijn voor een vermelding die zich in de cache bevindt.
usecounts int Aantal keren dat het cacheobject is opgezocht. Niet verhoogd wanneer geparametriseerde queries een plan in de cache vinden. Kan meerdere keren worden verhoogd bij gebruik van Showplan.
size_in_bytes int Aantal bytes dat door het cacheobject wordt verbruikt.
memory_object_address varbinary(8) Geheugenadres van de gecachte invoer. Deze waarde kan met sys.dm_os_memory_objects worden gebruikt om de geheugenuitsplitsing van het gecachte plan te krijgen en met sys.dm_os_memory_cache_entries_entries om de kosten van het cachen van de entry te bepalen.
cacheobjtype Nvarchar(34) Type object in de cache. De waarde kan een van de volgende zijn:

Samengesteld Plan
Samengesteld Plan Stub
Parseboom
Uitgebreide Proc
CLR Gecompileerde Func
CLR Gecompileerde Proc
objtype nvarchar(16) Type van object. Hieronder staan de mogelijke waarden en hun bijbehorende beschrijvingen.

Proc: Opgeslagen procedure
Voorbereid: Voorbereide verklaring
Ad-hoc: ad-hocquery. Verwijst naar Transact-SQL als taalgebeurtenissen worden ingediend door osql of sqlcmd te gebruiken in plaats van als remote procedure-aanroepen.
ReplProc: Replicatiefilter-procedure
Trigger: Trigger
Bekijken: Bekijken
Standaard: Standaard
UsrTab: Gebruikerstabel
SysTab: Systeemtabel
Check: CONTROLEER beperking
Regel: Regel
plan_handle varbinary(64) Identificator voor het in-memory plan. Deze id is tijdelijk en blijft alleen constant terwijl het plan in de cache blijft. Deze waarde kan worden gebruikt met de volgende dynamische beheerfuncties:

sys.dm_exec_sql_text
sys.dm_exec_query_plan
sys.dm_exec_plan_attributes
pool_id int De ID van de resourcepool waarvoor het geheugengebruik van dit plan wordt meegenomen.
pdw_node_id int De id voor het knooppunt waarop deze distributie zich bevindt.

Van toepassing op: Azure Synapse Analytics, Analytics Platform System (PDW)

Permissions

VOOR SQL Server 2019 (15.x) en eerdere versies is toestemming vereist VIEW SERVER STATE .

VOOR SQL Server 2022 (16.x) en latere versies en Azure SQL Managed Instance is een machtiging vereist VIEW SERVER PERFORMANCE STATE .

Voor servicedoelstellingen van Azure SQL Database Basic, S0 en S1 en voor databases in elastische pools is het serverbeheerdersaccount , het Microsoft Entra-beheerdersaccount of het lidmaatschap van de ##MS_ServerStateReader##serverfunctie vereist. Voor alle andere SQL Database-servicedoelstellingen is de VIEW DATABASE STATE machtiging voor de database of het lidmaatschap van de ##MS_ServerStateReader## serverfunctie vereist.

Voorbeelden

Eén. Retourneert de batchtekst van vermeldingen in de cache die opnieuw worden gebruikt

Het volgende voorbeeld geeft de SQL-tekst terug van alle gecachte vermeldingen die meer dan eens zijn gebruikt.

SELECT usecounts,
       cacheobjtype,
       objtype,
       text
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
WHERE usecounts > 1
ORDER BY usecounts DESC;

B. Queryplannen retourneren voor alle triggers in de cache

Het volgende voorbeeld geeft de queryplannen van alle gecachte triggers terug.

SELECT plan_handle,
       query_plan,
       objtype
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_query_plan(plan_handle)
WHERE objtype = 'Trigger';

C. De SET-opties retourneren waarmee het plan is gecompileerd

In het volgende voorbeeld worden de SET opties geretourneerd waarmee het plan is gecompileerd. Het sql_handle plan wordt ook teruggegeven. De PIVOT operator wordt gebruikt om de set_options en sql_handle kenmerken als kolommen uit te voeren in plaats van als rijen. Zie sys.dm_exec_plan_attributes voor meer informatie over de geretourneerde set_optionswaarde.

SELECT plan_handle,
       pvt.set_options,
       pvt.sql_handle
FROM (
    SELECT plan_handle,
           epa.attribute,
           epa.value
    FROM sys.dm_exec_cached_plans
        OUTER APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa
    WHERE cacheobjtype = 'Compiled Plan'
) AS ecpa
PIVOT (MAX (ecpa.value) FOR ecpa.attribute IN ("set_options", "sql_handle")) AS pvt;

D. Retourneert de uitsplitsing van het geheugen van alle gecompileerde plannen in de cache

Het volgende voorbeeld geeft een overzicht van het geheugen dat door alle gecompileerde plannen in de cache wordt gebruikt.

SELECT plan_handle,
       ecp.memory_object_address AS CompiledPlan_MemoryObject,
       omo.memory_object_address,
       type,
       page_size_in_bytes
FROM sys.dm_exec_cached_plans AS ecp
     INNER JOIN sys.dm_os_memory_objects AS omo
        ON ecp.memory_object_address = omo.memory_object_address
        OR ecp.memory_object_address = omo.parent_address
WHERE cacheobjtype = 'Compiled Plan';