DBCC FreeProcCache

 Download PDF

Being day 12 of the DBCC Command month at SteveStedman.com, tänään esillä DBCC komento on DBCC FREEPROCCACHE.

Description:

DBCC FREEPROCCACHEA käytetään kaikkien jäsennettyjen kyselysuunnitelmien puhdistamiseen muistista. Tätä käytetään yleisesti kehitysympäristöissä, mutta ei yhtä yleisesti tuotantoympäristössä.

käyttö kehitysympäristössä on yleistä esimerkiksi suorituksen viritystä tai kyselyiden parametrisointia työstettäessä. Voit tyhjentää menettelyn välimuisti DBCC FreeProcCache, suorita ohjelma tai web-sivu, joka voi käyttää tietokantaa, sitten nähdä, mitä on menettelyn välimuisti. Tästä voi olla hyötyä etsittäessä kyselyitä, joita voidaan joutua parametrisoimaan. Toinen tapa käyttää olisi selvittää, mitä kyselyitä ajetaan jokin ohjelma. Voit tehdä tämän voit aloittaa työskentelemällä tietokanta, jota ei käytetä muut, clearing menettely välimuisti DBCC FreeProcCache, suorita ohjelma yrität selvittää, sitten katsoa, mitä on välimuisti, jälleen tämä on jotain, joka voitaisiin tehdä kehitys-tai testausympäristö, mutta en suosittele tekemään sitä tuotannossa.

käyttö tuotantoympäristössä on harvinaista, tämä on yksi yleisimmistä asioista kokeilla, kun SQL Server on vaikeuksia. Jos olet ovat piste, että SQL Server on erittäin hidas vastaamaan ja et ole pystynyt löytämään syy, yksi asia yrittää on vapauttaa menettelyn välimuisti DBCC FreeProcCache ja katso, jos se korjaa ongelman.

DBCC FreeProcCache syntaksi:

dbcc freeproccache

esimerkki:

seuraava esimerkki on kehitysympäristöstä, joka käyttää AdventureWorks2012-tietokantaa.

ensin yhdistämme AdventureWorks2012: een ja katsomme, mitä kätkössä on.

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
Tässä näemme, että kätkössä on paljon. Seuraavaksi selvitämme välimuistin DBCC Freeproccachen kanssa ja katsomme uudelleen, mitä välimuistissa on.

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

ajettuasi DBCC Freeproccachen näet, ettei välimuistissa ole enää mitään jäljellä.
DBCC_FreeProcCache2kun heti seuraava kysely ajetaan, se on korjattava sen sijaan, että käytettäisiin jo jäsennettyä kyselyä välimuistissa. Tämä kestää hieman kauemmin kuin jos olisi jo jäsennelty suunnitelma juosta. Lets ajaa 3 kyselyt, sitten katsomaan välimuisti.

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

huomaa GO-lauseke jokaisen kyselyn välissä. Tämä kertoo SSMS suorittaa jokaisen kyselyn erillisenä eränä. Ilman GO lausuma 3 kyselyt olisi jäsennelty yhtenä eränä.
DBCC_FreeProcCache3
tässä on kolmen kyselytutkimuksen tulokset. Kaksi ensimmäistä palasivat tulokseen, ja kolmannella ei ollut rivejä tulosjoukossa. Nyt Katsotaanpa välimuistia

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

alla näemme yhteensä 20 kohdetta välimuistissa nyt. ylin kohde korostettu sininen on kysely käytimme nähdä, mitä oli välimuisti, toinen lohko korostettu punaisella sisältää 3 kyselyt ylhäältä, ja kolmas loput niistä ovat kyselyt suoritetaan SQL tai muut tukevat kyselyt. Esimerkiksi rivi 13 on dm_exec_sql_text, jota kutsutaan yllä olevasta kyselystä, joka tarkistaa suunnitelman.DBCC_FreeProcCache4

jos haluamme suodattaa tämän vain kirjoittamiimme kyselyihin, voit tehdä sen lisäämällä missä teksti kuten … – lausekkeen kyselyyn kuten tässä.

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

Tässä näemme, että vain kolme kyselyä näkyvät, ja että jokainen näistä kolmesta vie noin 40k muistia SQL Server. DBCC_FreeProcCache5joten miksi samasta SELECT-lauseesta on kolme kopiota, tämä tuntuu hieman tuhlailevalta. Itse asiassa se tekee, lisätietoja Katso aikaisempi viesti nimeltään Kuinka paljon menettelyä välimuisti ei yksi SQL selvitys kestää? On olemassa tapoja korjata tämä.

käyttämällä DBCC Freeproccachea tiettyyn Suunnitelmakahvaan

jos halusi tyhjentää vain yhden suunnitelman kahvan, eikä kaikkia suunnitelman kahvoja, saattoi käyttää valinnaista parametria nimeltä @handle.

saadaksemme suunnitelman haltuunsa, aloitamme muokkaamalla aikaisempaa kyselyämme näyttääksemme, mitä suunnitelman välimuistissa on. Voisitte jättää pois oman järjestelmänne WHERE-lausekkeen,mutta minulla on se täällä näyttääkseni meille vain kolme edellä mainittua kysymystä.

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

Tässä näemme samat kolme kyselyn suunnitelmia aiemmasta, jossa lisäksi sarake nimeltään plan_handle. Jos haluat vapauttaa yhden suunnitelman kahvan, kopioimme numeerisen suunnitelman kahvan ja lisäämme sen DBCC: n FreeProcCache-kyselyyn.

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

missä näemme vain 2 kolmesta alkuperäisestä kyselyt suunnitelman välimuisti.

kuinka suuri on Toimenpidekätköni?

voit suorittaa seuraavan kyselyn tarkistaaksesi toimenpidevälimuistin koon.

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;

, joka tuottaa testipalvelimellani seuraavat tulokset.

DBCC_FreeProcCache9

tietokannan kuntoraportit ja Plan-välimuistin

voit tarkastella plan-välimuistia myös tietokannan kuntoraportit-sovelluksen avulla kuten tässä.

DBCC_FreeProcCache10

huomautukset:

lisätietoja on TSQL Wiki DBCC freeproccachessa.

DBCC Komentokuukausi at SteveStedman.com se on melkein yhtä hauskaa kuin hyytelön syöminen.

 SteveStedman5
Steve ja Stedman Solutionsin tiimi ovat täällä kaikkia SQL Server-tarpeitasi varten.
Contct us today for your free 30 minute consultation..
olemme valmiita auttamaan!



+