Kiedy aktualizować statystyki?

42

Odziedziczyłem plany konserwacji, które wykonują następujące czynności:

  • Wyczyść stare dane
  • Sprawdza integralność DB
  • Wykonuje kopie zapasowe bazy danych i dziennika transakcji
  • Reorganizuje nasze indeksy
  • Aktualizacje statystyk
  • Usuń stare kopie zapasowe i pliki planu konserwacji

Z 23-minutowego planu konserwacji aktualizacja statystyk zajmuje aż 13 minut. Podczas tego 13-minutowego okresu dostęp do bazy danych jest blokowany (lub przynajmniej replikacja z tego DB do naszych pozostałych jest wstrzymana).

Moje pytanie brzmi:

Kiedy powinniśmy aktualizować statystyki i dlaczego?

To wydaje się być czymś, co powinniśmy robić rzadziej niż codziennie. Próbuję wyciągnąć nas z „tylko dlatego, że” nastawienia do wykonywania niepotrzebnej konserwacji.

Cebulowy rycerz
źródło
2
Jak często / w jaki sposób wiersze są wstawiane / aktualizowane / usuwane? Dla mnie jest to decydujący czynnik.
JNK
@JNK Wstawiamy ~ 70 000 wierszy dziennie w całym DB. Aktualizuj ~ 100 wierszy miesięcznie.
Cebul-Rycerz
1 - Jest to bardziej odpowiednie, jeśli wiemy przez TABELĘ, ile wierszy, a 2 - jako procent. 70 tys. Wierszy dziennie na stole o długości 1 m jest znacznie inne niż na stole o długości 500 m
JNK
Polecam użycie czegoś takiego jak ola.hallengren.com/… to rozwiązanie tylko przebudowuje / reorganizuje i aktualizuje to, co jest potrzebne, w ten sposób możesz skrócić czas potrzebny na plan konserwacji, a także zaoszczędzić dużo dziury w dzienniku.
Peter

Odpowiedzi:

28

Jeśli nie masz do tego okna konserwacji, codzienne aktualizowanie statystyk jest prawdopodobnie nieco przesadzone. Zwłaszcza jeśli masz włączoną funkcję Auto Update Statistics dla bazy danych. W swoim oryginalnym poście powiedziałeś, że użytkownicy widzą obniżenie wydajności z powodu tego planu konserwacji. Czy nie ma innego czasu na uruchomienie tego planu konserwacji? Nie ma innego okna? Widzę, że twój plan obejmuje reorganizację indeksów, kiedy przebudowujesz indeksy? Kiedy ta operacja się dzieje, statystyki są automatycznie aktualizowane (pod warunkiem, że nie jest wyłączone dla indeksu).

To, jak często powinieneś aktualizować statystyki, zależy w dużej mierze od tego, ile modyfikacji danych otrzymują twoje indeksy i dane . Jeśli jest bardzo mało modyfikacji ( INSERT, UPDATE, DELETE) z danymi, a następnie można mieć bardziej rzadkie harmonogram zadania aktualizacji statystyk.

Jednym ze sposobów sprawdzenia, czy statystyki są nieaktualne, jest sprawdzenie planów wykonania i jeśli szacowane wiersze znacznie różnią się od rzeczywistych wierszy zwróconych, jest to dobra wskazówka, że ​​interwał należy zwiększyć. W twoim przypadku idziesz w drugą stronę i może być trochę prób. Aktualizuj statystyki co tydzień, a jeśli zaczniesz dostrzegać oznaki przestarzałych statystyk, to stamtąd.

Jeśli korzystasz z automatycznej aktualizacji statystyk dla swojej bazy danych, zapoznaj się z tym odniesieniem, aby poznać próg aktualizacji statystyk.

Thomas Stringer
źródło
Odbudowujemy indeksy raz w tygodniu.
Cebul-Rycerz
5
@ Onion-Knight Następnie aktualizujesz statystyki raz w tygodniu, kiedy odbudowujesz swoje indeksy. Może to być wystarczające, jeśli przeprowadzasz przebudowę indeksu koców w bazie danych.
Thomas Stringer
25

Kiedy aktualizować statystyki?

tylko wtedy, gdy funkcja automatycznych aktualizacji statystyk nie jest wystarczająca dla twoich wymagań. mam na myśli to, że jeśli automatyczne tworzenie i automatyczne aktualizacje statystyk są WŁĄCZONE, a otrzymujesz zły plan zapytań, ponieważ statystyki nie są dokładne lub aktualne, dobrym pomysłem może być kontrolowanie tworzenia i aktualizacji statystyk. ale jeśli nie masz nic przeciwko wydajności serwera SQL i czasowi wykonania zapytania.

następnie proponuję zatrzymać polecenie Statystyka aktualizacji w planach konserwacji

aktualizacja statystyk jest ważna i przydatna 1. pozwala optymalizatorowi zapytań SQL Server konsekwentnie tworzyć dobre plany zapytań, przy jednoczesnym utrzymaniu niskich kosztów programowania i administracji 2. Optymalizator zapytań wykorzystuje statystyki do oszacowania selektywności wyrażeń, a tym samym wielkości pośredniego i końcowe wyniki zapytania. 3. Dobre statystyki pozwalają optymalizatorowi dokładnie oszacować koszty różnych planów zapytań, a następnie wybrać plan wysokiej jakości


Jeśli chcesz ręcznie aktualizować statystyki, najpierw powinieneś wiedzieć, kiedy statystyki są aktualizowane automatycznie

Jeśli optymalizator zapytań SQL Server wymaga statystyk dla konkretnej kolumny w tabeli, która przeszła znaczną aktualizację od czasu ostatniego utworzenia lub aktualizacji statystyk, SQL Server automatycznie aktualizuje statystyki poprzez próbkowanie wartości kolumn (przy użyciu statystyk automatycznych aktualizacji) . Automatyczna aktualizacja statystyk jest uruchamiana przez optymalizację zapytania lub wykonanie skompilowanego planu i obejmuje tylko podzbiór kolumn, o których mowa w zapytaniu. Statystyki są aktualizowane przed kompilacją zapytania, jeśli AUTO_UPDATE_STATISTCS_ASYNC jest WYŁĄCZONY

tutaj są ładne artykuły, które mówią o tym, kiedy statystyki aktualizacji są uruchamiane na serwerze SQL

  1. od simple-talk Część 13. Kiedy uruchamiana jest automatyczna aktualizacja statystyk?
  2. sekcja support.microsoft : Automatyzacja określania autostatów
  3. msdn.microsoft sekcja: Utrzymywanie statystyk w SQL Server 2008

po dowiedzeniu się, kiedy statystyki są uruchamiane, pomoże Ci zdecydować, kiedy ręcznie zaktualizować statystyki

aby dowiedzieć się więcej o statystykach i ich wpływie na wydajność, polecam BrentOzar i Kimberly w sqlskills bardzo dobrych blogach i blogerach .

AmmarR
źródło