La actualización de estadísticas de SQL Server falla más RANGE_HI_KEY en la columna de clave ascendente

10

Estoy tratando de entender cómo funciona el muestreo estadístico y si lo siguiente es o no el comportamiento esperado en las actualizaciones de estadísticas muestreadas.

Tenemos una tabla grande dividida por fecha con un par de miles de millones de filas. La fecha de partición es la fecha comercial anterior y, por lo tanto, es una clave ascendente. Solo cargamos datos en esta tabla para el día anterior.

La carga de datos se ejecuta durante la noche, por lo que el viernes 8 de abril cargamos datos para el 7.

Después de cada ejecución, actualizamos las estadísticas, aunque tomamos una muestra, en lugar de una FULLSCAN.

Tal vez estoy siendo ingenuo, pero hubiera esperado que SQL Server identificara la clave más alta y la clave más baja en el rango para garantizar que obtuviera una muestra de rango precisa. De acuerdo con este artículo :

Para el primer segmento, el límite inferior es el valor más pequeño de la columna en la que se genera el histograma.

Sin embargo, no menciona el último cubo / valor más grande.

Con la actualización de estadísticas muestreada en la mañana del 8, la muestra perdió el valor más alto en la tabla (el 7).

ingrese la descripción de la imagen aquí

Como hacemos muchas consultas sobre datos del día anterior, esto resultó en una estimación de cardinalidad inexacta y una cantidad de consultas que expiraron.

¿Debería SQL Server no identificar el valor más alto para esa clave y usarlo como máximo RANGE_HI_KEY? ¿O es solo uno de los límites de actualización sin usar FULLSCAN?

Versión SQL Server 2012 SP2-CU7. Actualmente no podemos actualizar debido a un cambio en el OPENQUERYcomportamiento en SP3 que estaba redondeando los números en una consulta de servidor vinculado entre SQL Server y Oracle.

Mark Sinkinson
fuente

Respuestas:

11

¿Debería SQL Server no identificar el valor más alto para esa clave y usarlo como máximo RANGE_HI_KEY? ¿O es solo uno de los límites de actualización sin usar FULLSCAN?

Es una limitación de la implementación actual de estadísticas muestreadas. Tal como están las cosas, la colección de estadísticas muestreadas utiliza TABLESAMPLE SYSTEM, que utiliza un escaneo de orden de asignación y elige páginas del escaneo para muestrear. Solo las páginas elegidas contribuyen al histograma.

Dado que la exploración está ordenada por asignación (en lugar de ordenada por índice), no hay forma de dar preferencia a la primera y última página en orden de clave.

Para obtener más información, consulte esta pregunta relacionada:

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

y mi artículo, Escaneos de órdenes de asignación

Para soluciones alternativas, vea Estadísticas sobre columnas ascendentes por Fabiano Amorim

Paul White 9
fuente