DBCC FreeProcCache

 Hent PDF

at være Dag 12 i DBCC-Kommandomåneden kl SteveStedman.com, dagens fremhævede DBCC kommando er DBCC FREEPROCCACHE.

beskrivelse:

DBCC FREEPROCCACHE bruges til at rense alle de parsede forespørgselsplaner ud af hukommelsen. Dette bruges ofte i udviklingsmiljøer, men ikke så almindeligt i et produktionsmiljø.

brug i et udviklingsmiljø er almindeligt, for eksempel når du arbejder på performance tuning eller parameterisering af forespørgsler. Du kan rydde procedurecachen med DBCC FreeProcCache, køre programmet eller hjemmesiden, der muligvis bruger databasen, og derefter se, hvad der er i procedurecachen. Dette kan være nyttigt til at finde forespørgsler, der muligvis skal parameteriseres. En anden måde at bruge ville være at finde ud af, hvilke forespørgsler der køres af et program. For at gøre dette vil du starte med at arbejde med en database, der ikke bruges af andre, rydde proceduren cache med DBCC FreeProcCache, kør derefter det program, du prøver at finde ud af, og se derefter på, hvad der er i cachen, igen er dette noget, der kunne gøres i et udviklings-eller testmiljø, men jeg vil ikke anbefale at gøre det i produktionen.

brug i et produktionsmiljø bør være sjældent, dette er en af de almindelige ting at prøve, når vi har problemer. Hvis du er det punkt, at serveren er ekstremt langsom til at reagere, og du ikke har været i stand til at finde årsagen, er en ting at prøve at frigøre procedurecachen med DBCC FreeProcCache og se om det løser problemet.

DBCC FreeProcCache syntaks:

dbcc freeproccache

eksempel:

følgende eksempel er fra et udviklingsmiljø ved hjælp af databasen Adventurearbejder2012.

først forbinder vi til Eventyrarbejder2012 og se hvad der er i cachen.

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
her ser vi, at der er masser i cachen. Dernæst rydder vi cachen med DBCC FreeProcCache og tager endnu et kig på, hvad der er i cachen.

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

efter at have kørt DBCC FreeProcCache kan du se, at der ikke er noget tilbage i cachen.
DBCC_FreeProcCache2 når den næste forespørgsel køres, skal den repareres i stedet for at bruge en allerede analyseret forespørgsel i cachen. Dette vil tage lidt længere tid, end hvis der allerede var en parset plan at køre. Lad os køre 3 forespørgsler, så kig på cachen.

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

Læg mærke til go-sætningen mellem hver forespørgsel. Dette fortæller SSMS at køre hver forespørgsel som en separat batch. Uden go-erklæringen ville de 3 forespørgsler være blevet analyseret som en enkelt batch.
DBCC_FreeProcCache3
her ser vi resultaterne fra de tre forespørgsler. De to første returnerede resultater, og den tredje havde ingen rækker i resultatsættet. Lad os nu se på cachen

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

nedenfor ser vi i alt 20 elementer i cachen nu. det øverste element, der er fremhævet med blåt, er den forespørgsel, vi brugte til at se, hvad der var i cachen, den anden blok, der er fremhævet med rødt, indeholder de 3 forespørgsler ovenfra, og den tredje resten af dem er forespørgsler, der køres af CCL eller andre understøttende forespørgsler. Linje 13 er f.eks. den tekst, der kaldes fra forespørgslen ovenfor, der kontrollerer planen.DBCC_FreeProcCache4

hvis vi ønskede at filtrere dette ned til bare de forespørgsler, vi havde skrevet, kunne du gøre det ved at tilføje en hvor tekst som … klausul til forespørgslen som vist her.

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

her ser vi, at kun de tre forespørgsler dukker op, og at hver af disse tre optager omkring 40k hukommelse på serveren. DBCC_FreeProcCache5 så hvorfor er der tre kopier af den samme SELECT-sætning, Det virker lidt spildt. Faktisk gør det, for mere information se et tidligere indlæg kaldet Hvor meget Procedure Cache-hukommelse tager en KVM-Erklæring op? Der er måder at rette op på.

brug af DBCC FreeProcCache til et specifikt Planhåndtag

hvis du kun ville rydde et enkelt planhåndtag og ikke alle planhåndtagene, kan du bruge den valgfri parameter kaldet @håndtag.

for at få planhåndtaget starter vi med at ændre vores tidligere forespørgsel for at vise os, hvad der er i plancachen. Du kan udelade hvor-klausulen på dit eget system, men jeg har det her for at vise os bare de tre spørgsmål, der er tale om ovenfra.

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

her ser vi de samme tre forespørgselsplaner fra tidligere, med en tilføjelseskolonne kaldet plan_handle. For at frigøre et enkelt planhåndtag ville vi bare kopiere det numeriske planhåndtag og tilføje det til DBCC FreeProcCache-forespørgslen.

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

hvor vi kun ser 2 af de tre originale forespørgsler i plancachen.

hvor stor er min procedure Cache?

du kan køre følgende forespørgsel for at kontrollere størrelsen på din procedurecache.

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;

hvilket giver følgende resultater på min testserver.

DBCC_FreeProcCache9

Databasesundhedsrapporter og Plancachen

du kan også se plancachen ved hjælp af programmet Database Health Reports som vist her.

DBCC_FreeProcCache10

bemærkninger:

For mere information se DBCC freeproccache.

DBCC Kommandomåned kl SteveStedman.com er næsten lige så sjovt som at spise jello.


 SteveStedman5
Steve og teamet hos Stedman Solutions er her for alle dine SERVERBEHOV.
Contct os i dag for din gratis 30 minutters konsultation..
vi er klar til at hjælpe!



+