En el siguiente fragmento de plan de consulta, parece obvio que la estimación de fila para el Concatenation
operador debería ser ~4.3 billion rows
, o la suma de las estimaciones de fila para sus dos entradas.
Sin embargo, ~238 million rows
se produce una estimación de , lo que conduce a una estrategia Sort
/ Stream Aggregate
estrategia subóptima que derrama cientos de GB de datos a tempdb. Una estimación lógicamente consistente en este caso habría producido un Hash Aggregate
, eliminado el derrame y mejorado dramáticamente el rendimiento de la consulta.
¿Es esto un error en SQL Server 2014? ¿Existen circunstancias válidas en las que una estimación inferior a las entradas podría ser razonable? ¿Qué soluciones alternativas podrían estar disponibles?
Aquí está el plan de consulta completo (anónimo). No tengo acceso de administrador del sistema a este servidor para proporcionar resultados desde QUERYTRACEON 2363
o indicadores de rastreo similares, pero es posible que pueda obtener estos resultados de un administrador si fueran útiles.
La base de datos está en el nivel de compatibilidad 120 y, por lo tanto, utiliza el nuevo Estimador de cardinalidad de SQL Server 2014.
Las estadísticas se actualizan manualmente cada vez que se cargan datos. Dado el volumen de datos, actualmente estamos utilizando la frecuencia de muestreo predeterminada. Es posible que una tasa de muestreo más alta (o FULLSCAN
) pueda tener un impacto.