DBCC FreeProcCache

ke Stažení PDF

den 12 DBCC Příkaz na měsíc SteveStedman.com dnes je vybavený DBCC Příkazu DBCC FREEPROCCACHE.

Popis:

DBCC FREEPROCCACHE se používá pro očištění všech analyzovat plány dotazů z paměti. To se běžně používá ve vývojových prostředích, ale ne tak běžné ve výrobním prostředí.

použití ve vývojovém prostředí je běžné, například když pracujete na ladění výkonu nebo parametrizaci dotazů. Můžete vymazat mezipaměti postup s DBCC FreeProcCache, spustit program nebo webovou stránku, která může být pomocí databáze, pak uvidíme, co je v mezipaměti postup. To může být užitečné při hledání dotazů, které může být nutné parametrizovat. Dalším způsobem, jak použít, by bylo zjistit, jaké dotazy spouští nějaký program. K tomu by začít tím, že pracuje s databází, která není používán jiným, vymazání mezipaměti postup s DBCC FreeProcCache, pak spusťte program, který se snaží přijít na to, pak se podívejte na to, co je v cache, opět je to něco, co by mohlo být provedeno ve vývojovém nebo testovacím prostředí, ale nedoporučoval bych to dělat ve výrobě.

použití v produkčním prostředí by mělo být vzácné, to je jedna z běžných věcí, které je třeba vyzkoušet, když má SQL Server potíže. Pokud jste se do bodu, že SQL Server je extrémně pomalý reagovat a jste byli schopni najít příčinu, jedna věc je pokusit se zdarma mezipaměti postup s DBCC FreeProcCache a uvidíme, jestli to řeší problém.

DBCC FreeProcCache Syntaxe:

dbcc freeproccache

Příklad:

následující příklad je z vývoje envioronment pomocí Databáze AdventureWorks2012.

nejprve se připojíme k AdventureWorks2012 a uvidíme, co je v mezipaměti.

USE AdventureWorks2012;GOSELECT size_in_bytes, text FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st;

DBCC_FreeProcCache1
zde vidíme, že v mezipaměti je spousta. Dále vymažeme mezipaměť pomocí DBCC FreeProcCache a znovu se podíváme na to, co je v mezipaměti.

DBCC FREEPROCCACHE;SELECT size_in_bytes, text FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st;

po spuštění DBCC FreeProcCache můžete vidět, že v mezipaměti není nic.
DBCC_FreeProcCache2když je spuštěn další dotaz, bude třeba jej reparovat spíše než použít již analyzovaný dotaz v mezipaměti. To bude trvat o něco déle, než kdyby již existoval analyzovaný plán spuštění. Umožňuje spustit 3 dotazy, pak se podívat na cache.

GOSELECT FirstName, MiddleName, LastName FROM person.Person p WHERE FirstName like 'John';GOSELECT FirstName, MiddleName, LastName FROM person.Person p WHERE FirstName like 'Mary';GOSELECT FirstName, MiddleName, LastName FROM person.Person p WHERE FirstName like 'Bill';

Všimněte si příkazu GO mezi každým dotazem. To říká SSMS spustit každý dotaz jako samostatnou dávku. Bez příkazu GO by byly 3 dotazy analyzovány jako jedna dávka.
DBCC_FreeProcCache3
zde vidíme výsledky ze tří dotazů. První dva vrátili výsledky a třetí neměl ve výsledkové sadě žádné řádky. Nyní se podívejme na mezipaměť

SELECT size_in_bytes, text FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st;

níže vidíme celkem 20 položek v mezipaměti. horní položka zvýrazněná modře je dotaz, který jsme použili k zobrazení toho, co bylo v mezipaměti, druhý blok zvýrazněný červeně obsahuje 3 dotazy shora a třetí zbytek jsou dotazy spouštěné SQL nebo jinými podpůrnými dotazy. Například řádek 13 je dm_exec_sql_text, který je volán z dotazu výše, který kontroluje plán.DBCC_FreeProcCache4

pokud bychom to chtěli filtrovat pouze na dotazy, které jsme napsali, můžete to udělat přidáním klauzule WHERE text LIKE … do dotazu, jak je ukázáno zde.

SELECT size_in_bytes, text FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS stWHERE text LIKE N'SELECT FirstName%';

zde vidíme, že se zobrazují pouze tři dotazy a že každý z těchto tří zabírá asi 40 kB paměti na serveru SQL. DBCC_FreeProcCache5tak proč existují tři kopie stejného příkazu SELECT, zdá se to trochu zbytečné. Ve skutečnosti to dělá, pro více informací viz dřívější příspěvek s názvem kolik mezipaměti procedur zabírá jeden příkaz SQL? Existují způsoby, jak to napravit.

Pomocí DBCC FreeProcCache Pro Konkrétní Plán, Rukojeť

Pokud byste chtěli vymazat jen jeden plán zvládnout, a ne všechny plán zpracovává, můžete použít volitelný parametr s názvem @zvládnout.

Chcete-li získat popisovač plánu, začneme úpravou našeho dřívějšího dotazu, abychom nám ukázali, co je v mezipaměti plánu. Mohli byste vynechat klauzuli WHERE ve vašem vlastním systému, ale mám to tady, abych nám ukázal jen tři dotyčné dotazy shora.

SELECT size_in_bytes, text, plan_handle FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS stWHERE text LIKE N'SELECT FirstName%';

DBCC_FreeProcCache7

zde vidíme stejné tři plány dotazů z dřívějších, s přidáním sloupce s názvem plan_handle. Chcete-li uvolnit jeden popisovač plánu, stačí zkopírovat popisovač číselného plánu a přidat jej do dotazu DBCC FreeProcCache.

DBCC FREEPROCCACHE(0x060007000100FF3310B8DA7D0600000001000000000000000000000000000000000000000000000000000000);SELECT size_in_bytes, text, plan_handle FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS stWHERE text LIKE N'SELECT FirstName%';

DBCC_FreeProcCache8

kde vidíme pouze 2 ze tří původních dotazů v mezipaměti plánu.

jak velká je moje mezipaměť procedur?

můžete spustit následující dotaz a zkontrolovat velikost mezipaměti procedur.

SELECT count(*) AS NumPlans, objtype as Type,SUM(size_in_bytes)/(1024.0*1024.0) AS size_in_mbFROM sys.dm_exec_cached_plansGROUP BY objtype;

který produkuje následující výsledky na mém testovacím serveru.

DBCC_FreeProcCache9

zprávy o stavu databáze a mezipaměť plánu

mezipaměť plánu můžete také zobrazit pomocí aplikace Zprávy o stavu Databáze, jak je ukázáno zde.

DBCC_FreeProcCache10

poznámky:

pro více informací viz TSQL Wiki DBCC freeproccache.

příkaz DBCC měsíc v SteveStedman.com je skoro stejně zábavné jako jíst želé.

 SteveStedman5
Steve a tým společnosti Stedman Solutions jsou zde pro všechny vaše potřeby serveru SQL.
kontaktujte nás ještě dnes a získejte bezplatnou 30minutovou konzultaci..
jsme připraveni pomoci!



+