Compartir a través de


La suposición de contención de combinación en el nuevo estimador de cardinalidad degrada el rendimiento de las consultas.

Este artículo le ayuda a resolver problemas de rendimiento que pueden producirse en SQL Server 2014 y versiones posteriores al compilar las consultas mediante el nuevo estimador de cardinalidad.

Versión del producto original: SQL Server
Número de KB original: 3189675

Síntomas

Considere el caso siguiente:

  • Está usando SQL Server 2014 o una versión posterior.
  • Se ejecuta una consulta que contiene combinaciones y predicados de filtro que no son de combinación.
  • La consulta se compila mediante la nueva estimación de cardinalidad (SQL Server) (Nueva CE).

En este escenario, experimentará una degradación del rendimiento de las consultas.

Este problema no se produce si compila la consulta mediante la CE heredada.

Causa

A partir de SQL Server 2014, se introdujo el nuevo estimador de cardinalidad (NUEVO CE) para el nivel de compatibilidad de la base de datos 120 y versiones posteriores. La nueva ce cambia varias suposiciones de la CE heredada en el modelo que usa el optimizador de consultas cuando calcula la cardinalidad de los distintos operadores y predicados.

Uno de estos cambios está relacionado con la suposición de contención de combinación.

El modelo de CE heredado supone que los usuarios siempre consultan los datos que existen. Esto significa que, para un predicado de combinación que implica una operación de equijoin para dos tablas, las columnas combinadas existen en ambos lados de la combinación. En presencia de predicados de filtro no de combinación adicionales en la tabla de combinación, la CE heredada supone cierto nivel de correlación para los predicados de combinación y predicados de filtro que no son de combinación. Esta correlación implícita se denomina Contención simple.

Como alternativa, la nueva CE usa la contención base como correlación. El nuevo modelo de CE supone que los usuarios pueden consultar los datos que no existen. Esto significa que los predicados de filtro en tablas independientes pueden no estar correlacionados entre sí. Por lo tanto, usamos un enfoque probabilístico.

Para muchos escenarios prácticos, el uso de la suposición de contención base crea mejores estimaciones. Esto, a su vez, crea opciones de plan de consulta más eficaces. Sin embargo, en algunas situaciones, el uso de la suposición de contención simple puede proporcionar mejores resultados. Si esto ocurre, puede experimentar una opción de plan de consulta menos eficaz al usar la nueva ce en lugar de la ce heredada.

Para obtener más información sobre cómo solucionar problemas relacionados con la nueva ce, consulte Disminución del rendimiento de las consultas después de la actualización de SQL Server 2012 o anterior a 2014 o posterior.

Solución

En SQL Server 2014 y versiones posteriores, puede usar la marca de seguimiento 9476 para forzar a SQL Server a usar la suposición de contención simple en lugar de la suposición de contención base predeterminada. Si puede modificar la consulta de aplicación, la mejor opción es usar la sugerencia ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS de consulta después de SQL Server 2016 (13.x) SP1. Para obtener más información, consulte USE HINT. Por ejemplo:

SELECT * FROM Table1 t1
JOIN Table2 t2
ON t1.Col1 = t2.Col1
WHERE Col1 = 10
OPTION (USE HINT ('ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS'));

Habilitar esta marca de seguimiento o usar la sugerencia de consulta puede mejorar la elección del plan de consulta sin tener que revertir completamente al modelo de CE heredado si se cumplen las condiciones siguientes:

  • Experimenta una opción de plan de consulta poco óptima que provoca un rendimiento general degradado para las consultas que contienen combinaciones y predicados de filtro que no son de combinación.
  • Puede comprobar una imprecisión significativa en una estimación de "cardinalidad de combinación" (es decir, el número real frente al estimado de filas que difieren significativamente).
  • Esta inexactitud no existe cuando se compilan consultas mediante la CE heredada.

Puede habilitar esta marca de seguimiento globalmente, en el nivel de sesión o en el nivel de consulta.

Nota:

El uso de marcas de seguimiento incorrectamente puede degradar el rendimiento de la carga de trabajo. Para obtener más información, vea Sugerencias (Transact-SQL) - Consulta.