DBCC FreeProcCache

 PDF letöltése

a DBCC Parancshónapjának 12. napja SteveStedman.com, a mai kiemelt DBCC parancs a DBCC FREEPROCCACHE.

leírás:

a DBCC FREEPROCCACHE az összes elemzett lekérdezési terv memóriából történő törlésére szolgál. Ezt általában fejlesztési környezetekben használják, de nem olyan gyakori a termelési környezetben.

használata fejlesztői környezetben gyakori, például amikor teljesítményhangoláson vagy lekérdezések paraméterezésén dolgozik. Törölheti az eljárás gyorsítótárát a DBCC FreeProcCache segítségével, futtathatja az adatbázist használó programot vagy weboldalt, majd megnézheti, mi van az eljárás gyorsítótárában. Ez hasznos lehet olyan lekérdezések keresésében, amelyeket esetleg paraméterezni kell. A használat másik módja az lenne, ha megtudná, milyen lekérdezéseket futtat egy program. Ehhez kezdje azzal, hogy egy olyan adatbázissal dolgozik, amelyet mások nem használnak, törölje az eljárást gyorsítótár a DBCC FreeProcCache segítségével, majd futtassa a kitalálni kívánt programot, majd nézze meg, mi van a gyorsítótárban, ismét ez olyasmi, amit fejlesztési vagy tesztkörnyezetben lehet megtenni, de nem javasolnám a gyártásban.

a termelési környezetben való használatnak ritkanak kell lennie, ez az egyik leggyakoribb dolog, amelyet meg kell próbálni, ha az SQL Server nehézségekbe ütközik. Ha az a pont, hogy az SQL Server rendkívül lassan reagál, és nem sikerült megtalálni az okot, egy dolog, hogy megpróbálja, hogy szabad az eljárás cache DBCC FreeProcCache, és nézd meg, hogy megoldja a problémát.

DBCC FreeProcCache szintaxis:

dbcc freeproccache

példa:

a következő példa egy fejlesztési környezetből származik, amely az AdventureWorks2012 adatbázist használja.

először csatlakozunk az AdventureWorks2012-hez, és megnézzük, mi van a gyorsítótárban.

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
itt látjuk, hogy rengeteg van a gyorsítótárban. Ezután tisztítsuk meg a gyorsítótárat a DBCC FreeProcCache segítségével, majd nézzük meg még egyszer, mi van a gyorsítótárban.

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

a DBCC FreeProcCache futtatása után láthatja, hogy semmi sem maradt a gyorsítótárban.
DBCC_FreeProcCache2 a következő lekérdezés futtatásakor a gyorsítótárban már elemzett lekérdezés helyett újra kell telepíteni. Ez egy kicsit tovább tart, mint ha már volt egy elemzett terv a futtatáshoz. Lehetővé teszi 3 lekérdezések futtatását, majd vessen egy pillantást a gyorsítótárra.

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

figyelje meg a GO utasítást Az egyes lekérdezések között. Ez azt mondja az SSMS-nek, hogy minden lekérdezést külön kötegként futtasson. A GO utasítás nélkül a 3 lekérdezést egyetlen tételként elemezték volna.
DBCC_FreeProcCache3
itt láthatjuk a három lekérdezés eredményeit. Az első kettő eredményt adott, a harmadiknak pedig nem volt sora az eredménykészletben. Most vessünk egy pillantást a gyorsítótárra

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

az alábbiakban összesen 20 elemet látunk a gyorsítótárban. a kékkel kiemelt felső elem az a lekérdezés, amellyel megnéztük, mi volt a gyorsítótárban, a második, pirossal kiemelt blokk felülről tartalmazza a 3 lekérdezést, a harmadik többi pedig az SQL vagy más támogató lekérdezések által futtatott lekérdezések. Például a 13. sor a dm_exec_sql_text, amelyet a fenti lekérdezésből hívunk meg, amely ellenőrzi a tervet.DBCC_FreeProcCache4

ha ezt csak az általunk írt lekérdezésekre szeretnénk szűrni, akkor ezt megteheti egy WHERE text LIKE … záradék hozzáadásával a lekérdezéshez az itt látható módon.

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

itt azt látjuk, hogy csak a három lekérdezés jelenik meg, és hogy mindhárom körülbelül 40 ezer memóriát foglal el az SQL Serveren. DBCC_FreeProcCache5 miért van ugyanannak a SELECT utasításnak három példánya, ez kissé pazarlónak tűnik. Valóban ez nem, további információkért lásd egy korábbi post nevű mennyi eljárás Cache memória nem egy SQL utasítás veszi fel? Vannak módok ennek kijavítására.

a DBCC FreeProcCache használata egy adott Tervfogantyúhoz

ha csak egyetlen tervfogantyút szeretne törölni, és nem az összes tervfogantyút, akkor használhatja a @handle nevű opcionális paramétert.

a tervfogantyú megszerzéséhez először módosítjuk a korábbi lekérdezésünket, hogy megmutassuk, mi van a terv gyorsítótárában. Elhagyhatja a WHERE záradékot a saját rendszerén, de itt van, hogy fentről csak a szóban forgó három kérdést mutassa meg nekünk.

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

itt ugyanazt a három lekérdezési tervet látjuk a korábbiakból, a plan_handle nevű addíciós oszloppal. Egyetlen tervfogantyú felszabadításához egyszerűen átmásoljuk a numerikus tervfogantyút, és hozzáadjuk a DBCC FreeProcCache lekérdezéshez.

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

ahol a terv gyorsítótárában a három eredeti lekérdezés közül csak 2-et látunk.

mekkora az eljárás Gyorsítótáram?

a következő lekérdezéssel ellenőrizheti az eljárás gyorsítótárának méretét.

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;

amely a következő eredményeket hozza létre a tesztkiszolgálómon.

DBCC_FreeProcCache9

Adatbázis-Állapotjelentések és terv-gyorsítótár

a terv-gyorsítótárat az adatbázis-állapot-jelentések alkalmazás segítségével is megtekintheti az itt látható módon.

DBCC_FreeProcCache10

Megjegyzések:

további információkért lásd: TSQL Wiki DBCC freeproccache.

DBCC parancs hónap SteveStedman.com majdnem annyira szórakoztató, mint zselét enni.


 SteveStedman5
Steve és a Stedman Solutions csapata minden SQL Server-igényt kielégít.
vegye fel velünk a kapcsolatot ma az ingyenes 30 perces konzultációért..
készek vagyunk segíteni!



+