Czy istnieje powód, aby ręcznie aktualizować statystyki?

19

W SQL Server statystyki są aktualizowane automatycznie, gdy są Auto Update Statisticsw True(co jest ustawieniem domyślnym). Czy istnieje powód ręcznej aktualizacji statystyk i w jakich okolicznościach?

jrara
źródło

Odpowiedzi:

21

Jasne, jeśli Twoje dane zmieniają się częściej niż wskaźnik automatycznych statystyk (lub, powiedzmy, aktualizujesz <20% wierszy często, np. Aktualizując statusy lub znaczniki daty / godziny). Lub jeśli twoja tabela jest ogromna i nie zmienia się wystarczająco, aby wywołać automatyczne aktualizacje statystyk. Lub jeśli masz przefiltrowane indeksy ( ponieważ próg automatycznych statystyk nadal opiera się na% zmian w całej tabeli, a nie na% zmiany podzbioru wierszy w przefiltrowanym indeksie ).

Aaron Bertrand
źródło
+1 dla przefiltrowanych indeksów. Myślę, że to główny powód, lub w BARDZO dużych zestawach danych. Mam tabele, które wstawiam 30 mln wierszy miesięcznie, ale jest to niewielki odsetek, więc statystyki zwykle nie są aktualizowane, chyba że rozpocznę je ręcznie.
JNK
+1 Ponadto robisz to zgodnie z harmonogramem, aby zresetować liczniki, co oznacza mniejsze szanse poza oknem konserwacji.
gbn
7

Kilka innych (powierzchownych) powodów:

Statystyki automatycznej aktualizacji będą blokować zapytanie, które uruchomiło aktualizację, dopóki nowe statystyki nie będą gotowe.

... Chyba że włączysz również automatyczne aktualizowanie statystyk asynchronicznie. Wówczas zapytanie, które uruchomiło aktualizację, nie będzie czekać na nowe statystyki, ale potencjalnie będzie działać ze starymi, niepoprawnymi statystykami.

Wystąpiły również dziwne problemy z blokowaniem, gdy baza danych ze stosunkowo dużymi tabelami (44M wierszy, 8,5 GB) zaczynała aktualizować statystyki. Jednak wycofaliśmy tę aplikację, zanim naprawdę udało mi się wyśledzić, co się dzieje.

db2
źródło
1
+1 To świetna uwaga na temat blokowania i opcji asynchronizacji.
Aaron Bertrand