2009. január 22., csütörtök

SQL Cache ürítése

Az SQL Server igen szofisztikált cache-elési mechanizmussal rendelkezik (képes a memóriában tárolni a felparseolt query-ket, beolvasott lapokat, stb). Erre ritkán gondolunk úgy, mint egy probléma forrására - legtöbbszöt inkább öröm, hogy többedszeri futtatásra már akár nagyságrendekkel gyorsabban lefuthat a lekérdezésünk. Egy szituáció azonban van, amikor ez zavaró: ha teljesítmény-elemzést, optimalizálást próbálunk végezni, általában azt is szeretnénk látni, hogy mi van, ha egy "hideg" adatbázis-motor kapja meg a kérésünk.

Szerencsére ezek a cache-ek törölhetők: a DBCC FREEPROCCACHE segítségével a végrehajtási tervek cache-ét üríthetjük ki, a DBCC DROPCLEANBUFFERS segítségével pedig az eddig felolvasott adatokat invalidálhatjuk.

Érdemes tehát így kezdeni az optimalizáladó querynk futtatását:

DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS

SELECT
    Mezo1, Mezo2, ...
--    További bonyolult query...
Bánjuk viszont óvatosan ezekkel, amennyiben egy produkciós környezetben futó SQL Serverrel játszunk - nem biztos, hogy a felhasználóink örülni fognak az esetlegesen sokszorosára nyúló válaszidőknek.

2 megjegyzés:

  1. Hali!

    Koszi nagyon faintos, epp most kellett :P
    Iszonyat hasznos volt!
    Neked is ugy megy hogy "GO-zol" a SELECT elott v neked ment nelkule is? :)
    Tnx
    VálaszTörlés