¿Cómo funciona el muestreo al actualizar las estadísticas?

10

Tengo varias mesas masivas. Me gustaría asegurarme de que sus estadísticas estén actualizadas a través de un plan de mantenimiento semanal.

Sin embargo, hacerlo lleva demasiado tiempo.

Si especifico

WITH SAMPLE 50 PERCENT

¿SQL Server muestra entonces:

  1. el primer 50% de páginas
  2. cada dos páginas
  3. o alguna otra estrategia?

BOL no está claro en esto.

Nik
fuente

Respuestas:

16

Porque WITH SAMPLE 50 PERCENTfunciona como si para cada página de datos en la tabla, SQL Server lanza una moneda. Si cae cara, lee todas las filas de la página. Si aterriza cruz, entonces no lee ninguno.

El seguimiento de la UPDATE STATISTICS T WITH SAMPLE 50 PERCENTllamada en Profiler muestra que se emite la siguiente consulta

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 plan

ingrese la descripción de la imagen aquí

TABLESAMPLE SYSTEM (5.000000e+001 PERCENT)es responsable del muestreo y está documentado aquí

TABLESAMPLE SYSTEMdevuelve un porcentaje aproximado de filas y genera un valor aleatorio para cada página física de 8 KB en la tabla. Según el valor aleatorio de una página y el porcentaje especificado en la consulta, una página se incluye en la muestra o se excluye. Cada página que se incluye devuelve todas las filas en el conjunto de resultados de muestra.

La documentación también establece

Aunque el plan muestra que se realiza un escaneo de tabla, solo las páginas que se incluyen en el conjunto de resultados deben leerse del archivo de datos.

La STATMANllamada es a una función agregada interna que se describe brevemente aquí

Martin Smith
fuente