Come funziona il campionamento durante l'aggiornamento delle statistiche?


10

Ho diversi tavoli enormi. Vorrei assicurarmi che le loro statistiche siano aggiornate tramite un piano di manutenzione settimanale.

Tuttavia, farlo richiede troppo tempo.

Se lo specifico

WITH SAMPLE 50 PERCENT

SQL Server quindi campiona:

  1. il primo 50% di pagine
  2. ogni altra pagina
  3. o qualche altra strategia?

BOL non è chiaro su questo.

Risposte:


16

Per WITH SAMPLE 50 PERCENTfunziona come se per ogni pagina di dati nella tabella di SQL Server lancia una moneta. Se arriva alla testa, legge tutte le righe della pagina. Se atterra la coda, non legge nessuno.

Tracciare la UPDATE STATISTICS T WITH SAMPLE 50 PERCENTchiamata in Profiler mostra che viene emessa la seguente query

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) 

Con piano

inserisci qui la descrizione dell'immagine

TABLESAMPLE SYSTEM (5.000000e+001 PERCENT)è responsabile del campionamento ed è documentato qui

TABLESAMPLE SYSTEMrestituisce una percentuale approssimativa di righe e genera un valore casuale per ogni pagina fisica da 8 KB nella tabella. In base al valore casuale di una pagina e alla percentuale specificata nella query, una pagina viene inclusa nell'esempio o esclusa. Ogni pagina inclusa restituisce tutte le righe nel set di risultati di esempio.

La documentazione afferma anche

Sebbene il piano mostri che viene eseguita una scansione della tabella, solo le pagine incluse nel set di risultati devono effettivamente essere lette dal file di dati.

La STATMANchiamata è a una funzione aggregata interna brevemente descritta qui

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.