Przejdź do treści

DevStyle - Strona Główna
Czyszczenie cache SQL Servera

Czyszczenie cache SQL Servera

Maciej Aniserowicz

28 marca 2011

Backend

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:).

Zobacz również