Comment fonctionne l'échantillonnage lors de la mise à jour des statistiques?


10

J'ai plusieurs tables massives. Je voudrais m'assurer que leurs statistiques sont à jour via un plan de maintenance hebdomadaire.

Cependant, cela prend trop de temps.

Si je précise

WITH SAMPLE 50 PERCENT

SQL Server échantillonne-t-il ensuite:

  1. les premiers 50% des pages
  2. toutes les deux pages
  3. ou une autre stratégie?

BOL n'est pas clair à ce sujet.

Réponses:


16

Car WITH SAMPLE 50 PERCENTcela fonctionne comme si pour chaque page de données du tableau, SQL Server retournait une pièce. S'il atterrit en tête, il lit toutes les lignes de la page. S'il atterrit, il n'en lit aucun.

Le suivi de l' UPDATE STATISTICS T WITH SAMPLE 50 PERCENTappel dans le profileur montre que la requête suivante est émise

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) 

Avec plan

entrez la description de l'image ici

TABLESAMPLE SYSTEM (5.000000e+001 PERCENT)est responsable de l'échantillonnage et est documenté ici

TABLESAMPLE SYSTEMrenvoie un pourcentage approximatif de lignes et génère une valeur aléatoire pour chaque page physique de 8 Ko du tableau. En fonction de la valeur aléatoire d'une page et du pourcentage spécifié dans la requête, une page est soit incluse dans l'échantillon, soit exclue. Chaque page incluse renvoie toutes les lignes de l'exemple de jeu de résultats.

La documentation indique également

Bien que le plan montre qu'une analyse de table est effectuée, seules les pages incluses dans le jeu de résultats doivent être lues à partir du fichier de données.

L' STATMANappel est à une fonction d'agrégation interne brièvement décrite ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.