Jak działa próbkowanie podczas aktualizacji statystyk?

10

Mam kilka ogromnych stołów. Chciałbym się upewnić, że ich statystyki są aktualne poprzez tygodniowy plan konserwacji.

Jednak zajmuje to zbyt dużo czasu.

Jeśli podam

WITH SAMPLE 50 PERCENT

SQL Server następnie przykładowo:

  1. pierwsze 50% stron
  2. co druga strona
  3. lub jakaś inna strategia?

BOL nie jest tego jasne.

Nik
źródło

Odpowiedzi:

16

Ponieważ WITH SAMPLE 50 PERCENTdziała to tak, jakby dla każdej strony danych w tabeli SQL Server odwrócił monetę. Jeśli wyląduje, odczytuje wszystkie wiersze na stronie. Jeśli wyląduje, to nie czyta żadnego.

Śledzenie UPDATE STATISTICS T WITH SAMPLE 50 PERCENTpołączenia w programie Profiler pokazuje, że wysyłane jest następujące zapytanie

SELECT StatMan([SC0], [SB0000])
FROM   (SELECT TOP 100 PERCENT [SC0],
                               step_direction([SC0]) OVER (ORDER BY NULL) AS [SB0000]
        FROM   (SELECT [C] AS [SC0]
                FROM   [dbo].[T] TABLESAMPLE SYSTEM (5.000000e+001 PERCENT) 
                WITH (READUNCOMMITTED)) AS _MS_UPDSTATS_TBL_HELPER
        ORDER  BY [SC0],
                  [SB0000]) AS _MS_UPDSTATS_TBL
OPTION (MAXDOP 1) 

Z planem

wprowadź opis zdjęcia tutaj

TABLESAMPLE SYSTEM (5.000000e+001 PERCENT)jest odpowiedzialny za pobieranie próbek i jest tutaj udokumentowany

TABLESAMPLE SYSTEMzwraca przybliżony procent wierszy i generuje losową wartość dla każdej fizycznej strony o wielkości 8 KB w tabeli. Na podstawie losowej wartości strony i wartości procentowej określonej w zapytaniu strona jest uwzględniona w próbce lub wykluczona. Każda uwzględniona strona zwraca wszystkie wiersze w przykładowym zestawie wyników.

Dokumentacja również stwierdza

Chociaż plan pokazuje, że wykonywane jest skanowanie tabeli, tylko te strony, które są zawarte w zestawie wyników, są w rzeczywistości wymagane do odczytania z pliku danych.

STATMANWezwanie jest agregat wewnętrzny Funkcja krótko opisane tutaj

Martin Smith
źródło