Delen via


DBCC FREEPROCCACHE (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Hiermee verwijdert u alle elementen uit de plancache, verwijdert u een specifiek plan uit de plancache door een plangreep of SQL-ingang op te geven, of verwijdert u alle cachevermeldingen die zijn gekoppeld aan een opgegeven resourcegroep.

Notitie

DBCC FREEPROCCACHE wist de uitvoeringsstatistieken voor systeemeigen gecompileerde opgeslagen procedures niet. De procedurecache bevat geen informatie over systeemeigen gecompileerde opgeslagen procedures. Uitvoeringsstatistieken die zijn verzameld bij procedureuitvoeringen, worden weergegeven in de DMV's met uitvoeringsstatistieken: sys.dm_exec_procedure_stats (Transact-SQL) en sys.dm_exec_query_plan (Transact-SQL).

Transact-SQL syntaxisconventies

Syntaxis

Syntaxis voor SQL Server en Azure SQL Database:

DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ]

Syntaxis voor Azure Synapse Analytics en Analytics Platform System (PDW):

DBCC FREEPROCCACHE [ ( COMPUTE | ALL ) ]
     [ WITH NO_INFOMSGS ]
[;]

Argumenten

( { plan_handle | sql_handle | pool_name } )

plan_handle een queryplan uniek identificeert voor een batch die is uitgevoerd en waarvan het plan zich in de plancache bevindt. plan_handle is varbinary(64) en kan worden verkregen uit de volgende dynamische beheerobjecten:

sql_handle is de SQL-handle van de batch die moet worden gewist. sql_handle is varbinary(64) en kan worden verkregen uit de volgende dynamische beheerobjecten:

pool_name is de naam van een Resource Governor-resourcegroep. pool_name is sysname- en kan worden verkregen door een query uit te voeren op de sys.dm_resource_governor_resource_pools dynamische beheerweergave.

Als u een Resource Governor-workloadgroep wilt koppelen aan een resourcegroep, voert u een query uit op de sys.dm_resource_governor_workload_groups dynamische beheerweergave. Voor informatie over de workloadgroep voor een sessie voert u een query uit op de sys.dm_exec_sessions dynamische beheerweergave.

MET NO_INFOMSGS

Onderdrukt alle informatieve berichten.

BEREKENEN

De cache van het queryplan opschonen van elk rekenknooppunt. Dit is de standaardwaarde.

ALLE

De cache van het queryplan opschonen van elk rekenknooppunt en van het beheerknooppunt.

Notitie

Vanaf SQL Server 2016 (13.x) kan ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE worden gebruikt om de procedure (plan) cache voor de huidige database te wissen.

Opmerkingen

Gebruik DBCC FREEPROCCACHE om de plancache zorgvuldig te wissen. Als u de procedurecache (plancache) wist, worden alle plannen verwijderd en worden binnenkomende queryuitvoeringen een nieuw plan gecompileerd in plaats van een eerder in de cache opgeslagen plan opnieuw te gebruiken.

Dit kan een plotselinge, tijdelijke afname van de queryprestaties veroorzaken naarmate het aantal nieuwe compilaties toeneemt. Voor elke gewiste cachestore in de plancache bevat het SQL Server-foutenlogboek het volgende informatieve bericht:

SQL Server has encountered %d occurrence(s) of cachestore flush for the '%s' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

Dit bericht wordt elke vijf minuten geregistreerd zolang de cache binnen dat tijdsinterval wordt leeggemaakt.

Met de volgende herconfiguratiebewerkingen wordt ook de procedurecache gewist:

  • aantal cache-buckets voor toegang controleren
  • cachequotum voor toegang controleren
  • clr ingeschakeld
  • kostendrempel voor parallelle uitvoering
  • eigendomsketen tussen databases
  • index geheugen maken
  • maximale mate van parallelle uitvoering
  • maximaal servergeheugen
  • maximale grootte van tekstrepl
  • maximale werkrolthreads
  • minimumgeheugen per query
  • minimale servergeheugen
  • kostenlimiet query governor
  • querywachttijden
  • time-out voor externe query
  • gebruikersopties

In Azure SQL Database fungeert DBCC FREEPROCCACHE op het exemplaar van de database-engine dat als host fungeert voor de huidige database of elastische pool. Als u DBCC FREEPROCCACHE uitvoert in een gebruikersdatabase, wordt de plancache voor die database gewist. Als de database zich in een elastische pool bevindt, wordt ook de plancache gewist in alle andere databases in die elastische pool. Het uitvoeren van de opdracht in de master database heeft geen invloed op andere databases op dezelfde logische server. Als u deze opdracht uitvoert in een database met de servicedoelstelling Basic, S0 of S1, kan de plancache in andere databases worden gewist met behulp van deze servicedoelstellingen op dezelfde logische server.

Resultatensets

Wanneer de WITH NO_INFOMSGS-component niet is opgegeven, retourneert DBCC FREEPROCCACHE:

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Machtigingen

Van toepassing op: SQL Server, Analytics Platform System (PDW)

  • Hiervoor is machtiging ALTER SERVER STATE op de server vereist.

Van toepassing op: Azure SQL Database

  • Vereist lidmaatschap van de serverfunctie ##MS_ServerStateManager##.

Van toepassing op: Azure Synapse Analytics

  • Vereist lidmaatschap van de db_owner vaste serverfunctie.

Opmerkingen voor Azure Synapse Analytics en Analytics Platform System (PDW)

Meerdere DBCC FREEPROCCACHE opdrachten kunnen gelijktijdig worden uitgevoerd.

In Azure Synapse Analytics of Analytics Platform System (PDW) kan het wissen van de plancache een tijdelijke afname van de queryprestaties veroorzaken, omdat binnenkomende query's een nieuw plan compileren in plaats van een eerder in de cache opgeslagen plan opnieuw te gebruiken.

DBCC FREEPROCCACHE (COMPUTE) zorgt ervoor dat SQL Server alleen query's opnieuw compileert wanneer ze worden uitgevoerd op de rekenknooppunten. Dit zorgt er niet voor dat Azure Synapse Analytics of Analytics Platform System (PDW) het parallelle queryplan dat wordt gegenereerd op het besturingsknooppunt opnieuw compileert.

DBCC FREEPROCCACHE kan tijdens de uitvoering worden geannuleerd.

Beperkingen en beperkingen voor Azure Synapse Analytics en Analytics Platform System (PDW)

DBCC FREEPROCCACHE kan niet worden uitgevoerd binnen een transactie.

DBCC FREEPROCCACHE wordt niet ondersteund in een EXPLAIN-instructie.

Metagegevens voor Azure Synapse Analytics en Analytics Platform System (PDW)

Er wordt een nieuwe rij toegevoegd aan de systeemweergave sys.pdw_exec_requests wanneer DBCC FREEPROCCACHE wordt uitgevoerd.

Voorbeelden: SQL Server

Een. Een queryplan wissen uit de plancache

In het volgende voorbeeld wordt een queryplan uit de plancache gewist door de handle van het queryplan op te geven. Om ervoor te zorgen dat de voorbeeldquery zich in de plancache bevindt, wordt de query eerst uitgevoerd. De sys.dm_exec_cached_plans en sys.dm_exec_sql_text dynamische beheerweergaven worden opgevraagd om de plangreep voor de query te retourneren.

De waarde van de plangreep uit de resultatenset wordt vervolgens ingevoegd in de DBCC FREEPROCACHE instructie om alleen dat plan uit de plancache te verwijderen.

USE AdventureWorks2022;
GO
SELECT * FROM Person.Address;
GO
SELECT plan_handle, st.text
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE text LIKE N'SELECT * FROM Person.Address%';
GO

Dit is de resultatenset.

plan_handle                                         text
--------------------------------------------------  -----------------------------
0x060006001ECA270EC0215D05000000000000000000000000  SELECT * FROM Person.Address;
  
(1 row(s) affected)
-- Remove the specific plan from the cache.
DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);
GO

B. Alle plannen uit de plancache wissen

In het volgende voorbeeld worden alle elementen uit de plancache gewist. De COMPONENT WITH NO_INFOMSGS wordt opgegeven om te voorkomen dat het informatiebericht wordt weergegeven.

DBCC FREEPROCCACHE WITH NO_INFOMSGS;

C. Alle cachevermeldingen wissen die zijn gekoppeld aan een resourcegroep

In het volgende voorbeeld worden alle cachevermeldingen gewist die zijn gekoppeld aan een opgegeven resourcegroep. De sys.dm_resource_governor_resource_pools weergave wordt eerst opgevraagd om de waarde voor pool_namete verkrijgen.

SELECT * FROM sys.dm_resource_governor_resource_pools;
GO
DBCC FREEPROCCACHE ('default');
GO

Voorbeelden: Azure Synapse Analytics and Analytics Platform System (PDW)

D. DBCC FREEPROCCACHE-basissyntaxis

In het volgende voorbeeld worden alle bestaande caches van het queryplan verwijderd uit de rekenknooppunten. Hoewel de context is ingesteld op UserDbSales, worden de caches van het queryplan rekenknooppunt voor alle databases verwijderd. De WITH NO_INFOMSGS component voorkomt dat informatieve berichten worden weergegeven in de resultaten.

USE UserDbSales;
DBCC FREEPROCCACHE (COMPUTE) WITH NO_INFOMSGS;

Het volgende voorbeeld heeft dezelfde resultaten als in het vorige voorbeeld, behalve dat informatieve berichten worden weergegeven in de resultaten.

USE UserDbSales;
DBCC FREEPROCCACHE (COMPUTE);

Wanneer informatieve berichten worden aangevraagd en de uitvoering is geslaagd, hebben de queryresultaten één regel per rekenknooppunt.

E. Toestemming verlenen om DBCC FREEPROCCACHE uit te voeren

In het volgende voorbeeld wordt de aanmeldingsmachtiging David om DBCC FREEPROCCACHEuit te voeren.

GRANT ALTER SERVER STATE TO David;
GO

Zie ook