devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
2 minut

Czyszczenie cache SQL Servera


28.03.2011

Optymalizacja procedur składowanych czy zwykłych zapytań do bazy danych nie jest zadaniem wdzięcznym, ale potrafi dać bardzo wiele satysfakcji. Kto doświadczył zoptymalizowania działania jakiegoś potworka w taki sposób, że po pół godziny pracy czas wykonania spada z 2 minut do 1 sekundy, wie doskonale o czym mówię. A jak uda się tego dokonać bez grzebania się w indeksach to już w ogóle cud/miód/itd. Wtedy z kolei ten, kto to zapytanie pisał oryginalnie, zasługuje na siarczystego liścia… ale akurat w moim przypadku jestem to także ja, więc sobie ten krok darowuję:).

Ważne jest to, aby nie badać czasu wykonania instrukcji raz po razie bez uprzedniego wyczyszczenia cache silnika bazy danych. Co z tego, że coś wykonuje się szybciej po jakichś zmianach, skoro w bazie mogą już istnieć zoptymalizowane pod tym kątem struktury? Po wprowadzeniu zmian dobrze jest nakazać SQL Serverowi: "zapomnij o tym co wiesz, potraktuj moje kolejne instrukcje tak świeżo i dziewiczo, jak na to zasługują, nie starając się być mądrzejszym od samego zuluguli!". Dzięki temu różnica między wykonaniem oryginalnego a zmodyfikowanego zapytania faktycznie będzie miarodajna.

Instrukcji tych szukam w necie bardzo często bo nie zadałem sobie nigdy trudu żeby je zapisać bądź zapamiętać. Niniejszym więc je zapisuję, żeby nadal nie musieć ich pamiętać:

  1:  checkpoint
  2:  go
  3:  DBCC dropcleanbuffers
  4:  go

Po tych komendach serwer powinien być wyczyszczony ze skeszowanych danych, ze swoich wewnętrznych optymalizacji i tak dalej, eccecera.

A może to nie tak? A może da się to uzyskać w lepszy sposób? Porady i sprostowania mile widziane:).

Nie przegap kolejnych postów!

Dołącz do ponad 9000 programistów w devstyle newsletter!

Tym samym wyrażasz zgodę na otrzymanie informacji marketingowych z devstyle.pl (doh...). Powered by ConvertKit
Notify of
s
s

DBCC FREEPROCCACHE

PiotrB

Nie bij, wytłumacz.

Ja np. sprawdzam obie wersje, z czyszczeniem (i oczywiści FREEPROCCACHE) i bez (w końcu w normalnych warunkach program tak pracuje). Przy okazji SQLa zrobię reklamę koledze: http://krzysztoflukowski.blogspot.com/ (mam nadzieję, że się Autor nie pogniewa).

Lukasz Grala

Zależy co dokładnie się chce usunąć z bufora..

Jak chcesz cały cache wyczyścić (a nie tylko plany)
DBCC DROPCLEANBUFFERS

Jeżeli wszystkie plany we wszystkich bazach…
DBCC FREEPROCCACHE
albo konkretny plan
DBCC FREEPROCCACHE (plan_handle)

Jak chcesz wyczyścić w jednej bazie
DBCC FLUSHPROCINDB (dbid)

Jak chcesz wyczyścić konkretną grupę obiektów w cache:
DBCC FREESYSTEMCACHE (pool_name)
np
DBCC FREESYSTEMCACHE (‘SQL Plans’)

procent

I jak to bywa dość regularnie, komentarze dużo bardziej wartościowe od samego posta, dzięki:)

Moja książka

Facebook

Zobacz również