Sdílet prostřednictvím


DBCC FREEPROCCACHE (Transact-SQL)

platí pro:SQL ServerAzure SQL Databaseazure SQL Managed InstanceAzure Synapse AnalyticsPlatform Platform System (PDW)

Odebere všechny prvky z mezipaměti plánu, odebere konkrétní plán z mezipaměti plánu zadáním popisovače plánu nebo popisovače SQL nebo odebere všechny položky mezipaměti přidružené k zadanému fondu zdrojů.

Poznámka

DBCC FREEPROCCACHE neujasní statistiky provádění pro nativně zkompilované uložené procedury. Mezipaměť procedur neobsahuje informace o nativně zkompilovaných uložených procedurách. Všechny statistiky provádění shromážděné z provádění provádění se zobrazí ve statistikách provádění zobrazení dynamické správy: sys.dm_exec_procedure_stats (Transact-SQL) a sys.dm_exec_query_plan (Transact-SQL).

Transact-SQL konvence syntaxe

Syntax

Syntaxe pro SQL Server a Azure SQL Database:

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

Syntaxe pro Systém platformy Azure Synapse Analytics a Analytics (PDW):

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

Argumenty

( { plan_handle | sql_handle | pool_name } )

plan_handle jednoznačně identifikuje plán dotazu pro dávku, která se spustila a jejíž plán se nachází v mezipaměti plánu. plan_handle je varbinary(64) a lze ji získat z následujících objektů dynamické správy:

sql_handle je popisovač SQL dávky, který se má vymazat. sql_handle je varbinary(64) a lze ji získat z následujících objektů dynamické správy:

pool_name je název fondu zdrojů Správce zdrojů. pool_name je sysname a dá se získat dotazem na zobrazení dynamické správy sys.dm_resource_governor_resource_pools.

Pokud chcete přidružit skupinu úloh Správce prostředků k fondu zdrojů, zadejte dotaz na sys.dm_resource_governor_workload_groups zobrazení dynamické správy. Informace o skupině úloh pro relaci najdete v sys.dm_exec_sessions zobrazení dynamické správy.

WITH NO_INFOMSGS

Potlačí všechny informační zprávy.

VYPOČÍTAT

Vyprázdněte mezipaměť plánu dotazů z každého výpočetního uzlu. Toto je výchozí hodnota.

VŠICHNI

Vymažte mezipaměť plánu dotazů z každého výpočetního uzlu a řídicího uzlu.

Poznámka

Počínaje SQL Serverem 2016 (13.x) je možné ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE použít k vymazání mezipaměti postupu (plánu) pro aktuální databázi.

Poznámky

Pomocí DBCC FREEPROCCACHE pečlivě vymažte mezipaměť plánu. Vymazání mezipaměti procedury (plán) způsobí vyřazení všech plánů a spuštění příchozích dotazů se zkompiluje nový plán místo opakovaného použití jakéhokoli dříve uloženého plánu v mezipaměti.

To může způsobit náhlé dočasné snížení výkonu dotazů při nárůstu počtu nových kompilací. Pro každé vymazání úložiště mezipaměti v mezipaměti plánu bude protokol chyb SQL Serveru obsahovat následující informační zprávu:

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.

Tato zpráva se protokoluje každých pět minut, dokud se mezipaměť vyprázdní v daném časovém intervalu.

Následující rekonfigurované operace také vymaží mezipaměť procedur:

  • access check cache bucket count
  • kvóta mezipaměti kontroly přístupu
  • povolená funkce clr
  • prahová hodnota nákladů pro paralelismus
  • řetězení vlastnictví napříč databázemi
  • vytvoření paměti indexu
  • maximální stupeň paralelismu
  • maximální velikost paměti serveru
  • maximální velikost repl textu
  • max worker threads
  • minimální paměť na dotaz
  • min serverová paměť
  • limit nákladů správce dotazů
  • čekání dotazu
  • Vypršení časového limitu vzdáleného dotazu
  • možnosti uživatele

Ve službě Azure SQL Database DBCC FREEPROCCACHE působí na instanci databázového stroje hostující aktuální databázi nebo elastický fond. Spuštění DBCC FREEPROCCACHE v uživatelské databázi vymaže mezipaměť plánu pro danou databázi. Pokud je databáze v elastickém fondu, vymaže také mezipaměť plánu ve všech ostatních databázích v daném elastickém fondu. Spuštění příkazu v databázi master nemá žádný vliv na jiné databáze na stejném logickém serveru. Spuštění tohoto příkazu v databázi pomocí cíle služby Basic, S0 nebo S1 může vymazat mezipaměť plánu v jiných databázích pomocí těchto cílů služby na stejném logickém serveru.

Sady výsledků

Pokud není zadaná klauzule WITH NO_INFOMSGS, DBCC FREEPROCCACHE vrátí:

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

Dovolení

Platí pro: SQL Server, Analytics Platform System (PDW)

  • Vyžaduje oprávnění ALTER SERVER STATE na serveru.

Platí pro: Azure SQL Database

  • Vyžaduje členství v roli serveru ##MS_ServerStateManager##.

Platí pro: Azure Synapse Analytics

  • Vyžaduje členství v db_owner pevné roli serveru.

Poznámky ke službě Azure Synapse Analytics a Systému analytických platforem (PDW)

Souběžně lze spustit více příkazů DBCC FREEPROCCACHE.

Vymazání mezipaměti plánu ve službě Azure Synapse Analytics nebo Platform System (PDW) může způsobit dočasné snížení výkonu dotazů, protože příchozí dotazy kompilují nový plán místo opakovaného použití jakéhokoli dříve uloženého plánu v mezipaměti.

DBCC FREEPROCCACHE (COMPUTE) způsobí, že SQL Server překompiluje dotazy pouze při jejich spuštění na výpočetních uzlech. Nezpůsobí to, že azure Synapse Analytics ani systém PDW (Analytics Platform System) překompilují plán paralelního dotazu, který se generuje na řídicím uzlu.

DBCC FREEPROCCACHE je možné během provádění zrušit.

Omezení a omezení pro Azure Synapse Analytics a Platform Platform System (PDW)

DBCC FREEPROCCACHE nelze spustit v rámci transakce.

DBCC FREEPROCCACHE se v příkazu EXPLAIN nepodporuje.

Metadata pro Azure Synapse Analytics a analytický systém platformy (PDW)

Při spuštění DBCC FREEPROCCACHE se do zobrazení systému sys.pdw_exec_requests přidá nový řádek.

Příklady: SQL Server

A. Vymazání plánu dotazu z mezipaměti plánu

Následující příklad vymaže plán dotazu z mezipaměti plánu zadáním popisovače plánu dotazu. Aby se zajistilo, že je ukázkový dotaz v mezipaměti plánu, spustí se nejprve dotaz. Zobrazení sys.dm_exec_cached_plans a sys.dm_exec_sql_text dynamické správy se dotazují, aby vrátila popisovač plánu dotazu.

Hodnota popisovače plánu ze sady výsledků se pak vloží do příkazu DBCC FREEPROCACHE, který odebere pouze tento plán z mezipaměti plánu.

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

Tady je sada výsledků.

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

B. Vymazání všech plánů z mezipaměti plánů

Následující příklad vymaže všechny prvky z mezipaměti plánu. Klauzule WITH NO_INFOMSGS je určena, aby se zabránilo zobrazení informační zprávy.

DBCC FREEPROCCACHE WITH NO_INFOMSGS;

C. Vymazání všech položek mezipaměti přidružených k fondu zdrojů

Následující příklad vymaže všechny položky mezipaměti přidružené k zadanému fondu zdrojů. Zobrazení sys.dm_resource_governor_resource_pools se nejprve dotazuje, aby získalo hodnotu pro pool_name.

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

Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)

D. Základní syntaxe DBCC FREEPROCCACHE

Následující příklad odebere všechny existující mezipaměti plánů dotazů z výpočetních uzlů. I když je kontext nastavený na UserDbSales, plán dotazů výpočetního uzlu se odebere pro všechny databáze. Klauzule WITH NO_INFOMSGS zabraňuje zobrazení informačních zpráv ve výsledcích.

USE UserDbSales;
DBCC FREEPROCCACHE (COMPUTE) WITH NO_INFOMSGS;

Následující příklad má stejné výsledky jako v předchozím příkladu s tím rozdílem, že se ve výsledcích zobrazí informační zprávy.

USE UserDbSales;
DBCC FREEPROCCACHE (COMPUTE);

Když se požadují informační zprávy a provádění proběhne úspěšně, výsledky dotazu budou mít jeden řádek na výpočetní uzel.

E. Udělení oprávnění ke spuštění DBCC FREEPROCCACHE

Následující příklad poskytuje přihlašovací David oprávnění ke spuštění DBCC FREEPROCCACHE.

GRANT ALTER SERVER STATE TO David;
GO

Viz také