Przykładowa aktualizacja programu SQL Server Statystyka brakuje najwyższego RANGE_HI_KEY w kolumnie z rosnącym kluczem

10

Próbuję zrozumieć, w jaki sposób działa próbkowanie statystyk i czy poniżej oczekiwane jest zachowanie aktualizacji próbkowanych statystyk.

Mamy duży stół podzielony według dat z kilkoma miliardami wierszy. Data podziału jest wcześniejszą datą biznesową, podobnie jak klucz rosnący. Ładujemy dane do tej tabeli tylko z poprzedniego dnia.

Ładowanie danych trwa z dnia na dzień, więc w piątek 8 kwietnia załadowaliśmy dane z 7.

Po każdym uruchomieniu aktualizujemy statystyki, chociaż pobieramy próbkę zamiast FULLSCAN.

Być może jestem naiwny, ale oczekiwałbym, że SQL Server zidentyfikuje najwyższy i najniższy klucz w zakresie, aby upewnić się, że uzyskał dokładną próbkę zakresu. Zgodnie z tym artykułem :

W pierwszym segmencie dolna granica jest najmniejszą wartością kolumny, na której generowany jest histogram.

Jednak nie wspomina o ostatnim segmencie / największej wartości.

Wraz z aktualizacją statystyk próbkowanych rano 8-go, próbka przeoczyła najwyższą wartość w tabeli (7-ta).

wprowadź opis zdjęcia tutaj

Ponieważ wykonujemy wiele zapytań dotyczących danych z poprzedniego dnia, spowodowało to niedokładne oszacowanie liczności i upłynął limit czasu wielu zapytań.

Czy SQL Server nie powinien identyfikować najwyższej wartości dla tego klucza i używać go jako wartości maksymalnej RANGE_HI_KEY? Czy to tylko jeden z limitów aktualizacji bez użycia FULLSCAN?

Wersja SQL Server 2012 SP2-CU7. Nie możemy obecnie dokonać aktualizacji ze względu na zmianę OPENQUERYzachowania w dodatku SP3, która zaokrąglała liczby w zapytaniu do serwera połączonego między SQL Server a Oracle.

Mark Sinkinson
źródło

Odpowiedzi:

11

Czy SQL Server nie powinien identyfikować najwyższej wartości dla tego klucza i używać go jako wartości maksymalnej RANGE_HI_KEY? Czy to tylko jeden z limitów aktualizacji bez użycia FULLSCAN?

Jest to ograniczenie obecnej implementacji próbkowanych statystyk. W tej chwili korzysta z kolekcji próbkowanych statystyk TABLESAMPLE SYSTEM, która wykorzystuje skanowanie kolejności przydziału i wybiera strony ze skanowania do próbki. Tylko wybrane strony składają się na histogram.

Ponieważ skanowanie jest uporządkowane według alokacji (a nie według indeksu), nie ma sposobu, aby dać pierwszeństwo pierwszej i ostatniej stronie w kolejności kluczy.

Aby uzyskać więcej informacji, zobacz powiązane pytanie:

Jak działa próbkowanie podczas aktualizacji statystyk?

i mój artykuł, Skany kolejności alokacji

Aby obejść ten problem, zobacz Statystyki dotyczące kolumn rosnących autorstwa Fabiano Amorima

Paul White 9
źródło