DBCC FreeProcCache

download PDF

zijnde dag 12 van de DBCC-Opdrachtmaand op SteveStedman.com, vandaag aanbevolen DBCC Commando is DBCC FREEPROCCACHE.

omschrijving:

DBCC FREEPROCCACHE wordt gebruikt om alle ontleed query-plannen uit het geheugen te wissen. Dit wordt vaak gebruikt in ontwikkelomgevingen, maar niet zo gebruikelijk in een productieomgeving.

gebruik in een ontwikkelomgeving is gebruikelijk, bijvoorbeeld wanneer u werkt aan performance tuning of parametrering van queries. U kunt de procedure cache te wissen met DBCC FreeProcCache, start het programma of webpagina die kan worden met behulp van de database, dan zien wat er in de procedure cache. Dit kan nuttig zijn bij het vinden van query ‘ s die mogelijk moeten worden geparametreerd. Een andere manier om te gebruiken zou zijn om uit te vinden welke queries worden uitgevoerd door een programma. Om dit te doen zou je beginnen met het werken met een database die niet wordt gebruikt door anderen, het wissen van de procedure cache met DBCC FreeProcCache, voer dan het programma dat u probeert te achterhalen, dan kijken naar wat er in de cache, opnieuw is dit iets dat kan worden gedaan in een ontwikkeling of test omgeving, maar ik zou niet aanraden om het te doen in de productie.

gebruik in een productieomgeving zou zeldzaam moeten zijn, dit is een van de veelvoorkomende dingen om te proberen wanneer SQL Server problemen heeft. Als je bent het punt dat SQL Server is zeer traag te reageren en je niet in staat om de oorzaak te vinden zijn geweest, een ding om te proberen is om de procedure cache met DBCC FreeProcCache vrij te maken en te zien of dat het probleem oplost.

DBCC FreeProcCache syntaxis:

dbcc freeproccache

voorbeeld:

het volgende voorbeeld is afkomstig uit een ontwikkelingsproject dat gebruik maakt van de AdventureWorks2012 Database.

eerst maken we verbinding met AdventureWorks2012 en zien we wat er in de cache zit.

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
hier zien we dat er genoeg in de cache zit. Vervolgens ruimen we de cache op met DBCC FreeProcCache en kijken we nog eens wat er in de cache zit.

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

na het uitvoeren van DBCC FreeProcCache kunt u zien dat er niets meer in de cache zit.
DBCC_FreeProcCache2wanneer de volgende query wordt uitgevoerd, moet deze worden hersteld in plaats van een reeds ontleed query in de cache te gebruiken. Dit zal wat langer duren dan wanneer er al een ontleed plan was om uit te voeren. Laten we uitvoeren 3 queries, neem dan een kijkje op de 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';

merk het ‘ GO ‘ – Statement op tussen elke query. Dit vertelt SSMS om elke query als een aparte batch uit te voeren. Zonder het Go statement zouden de 3 queries zijn ontleed als een enkele batch.
DBCC_FreeProcCache3
hier zien we de resultaten van de drie queries. De eerste twee geretourneerde resultaten, en de derde had geen rijen in de resultatenreeks. Laten we nu eens kijken naar de cache

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

hieronder zien we een totaal van 20 items in de cache nu. het bovenste item gemarkeerd in blauw is de query die we gebruikten om te zien wat er in de cache, het tweede blok gemarkeerd in rood Bevat de 3 queries van boven, en de derde rest van hen zijn queries worden uitgevoerd door SQL of andere ondersteunende queries. Bijvoorbeeld regel 13 is de dm_exec_sql_text die wordt aangeroepen vanuit de query hierboven die het plan controleert.DBCC_FreeProcCache4

als we dit wilden filteren tot alleen de query ‘ s die we geschreven hadden, zou je het kunnen doen door een where text LIKE … clausule toe te voegen aan de query zoals hier getoond.

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%';

hier zien we dat alleen de drie queries verschijnen, en dat elk van deze drie ongeveer 40K geheugen in beslag neemt op SQL Server. DBCC_FreeProcCache5 dus waarom zijn er drie kopieën van dezelfde SELECT statement, dit lijkt een beetje verspillend. Inderdaad, voor meer informatie zie een eerdere post genaamd hoeveel Procedure Cache geheugen heeft een SQL Statement nemen? Er zijn manieren om dit te corrigeren.

DBCC FreeProcCache gebruiken voor een specifieke Planhandle

Als u slechts één planhandle wilt wissen, en niet alle planhandles, kunt u de optionele parameter @handle gebruiken.

om de plan-handle te krijgen, beginnen we met het aanpassen van onze eerdere query om ons te laten zien wat er in de plan-cache zit. Je zou de WHERE-clausule op je eigen systeem kunnen weglaten, maar ik heb het hier om ons alleen de drie vragen in kwestie van bovenaf te laten zien.

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

hier zien we dezelfde drie query plannen van eerder, met een toevoeging kolom genaamd plan_handle. Om een enkele plan handle vrij te maken, zouden we gewoon de numerieke plan handle kopiëren, en dat toevoegen aan de DBCC FreeProcCache query.

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

waar we slechts 2 van de drie originele queries in de plan cache zien.

hoe groot is mijn Procedure-Cache?

u kunt de volgende query uitvoeren om de grootte van uw procedure cache te controleren.

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;

wat de volgende resultaten oplevert op mijn testserver.

DBCC_FreeProcCache9

database Health Reports en de Plan Cache

u kunt de plan cache ook bekijken met behulp van de database Health Reports applicatie zoals hier getoond.

DBCC_FreeProcCache10

opmerkingen:

voor meer informatie zie TSQL Wiki DBCC freeproccache.

DBCC-Opdrachtmaand op SteveStedman.com is bijna net zo leuk als het eten van jello.

SteveStedman5
Steve en het team van Stedman Solutions zijn hier voor al uw SQL Server-behoeften.
neem vandaag nog contact met ons op voor uw gratis 30 minuten durende consult..
We staan klaar om te helpen!



+