Compartir por


Retroalimentación de estimación de cardinalidad (CE) para expresiones

Se aplica a: SQL Server 2025 (17.x) , Azure SQL Database, Azure SQL Managed Instance, Base de datos SQL en Microsoft Fabric

Las estimaciones de cardinalidad inexactas suelen provocar un rendimiento deficiente durante la optimización de consultas. La retroalimentación de estimación de cardinalidad (CE) para expresiones amplía el sistema iniciado por la función de retroalimentación de CE. El objetivo es mejorar las estimaciones de cardinalidad para las expresiones repetidas. La retroalimentación de la función de expresiones aprende de las ejecuciones anteriores de expresiones a través de consultas, para identificar las opciones adecuadas del modelo de CE y aplicar lo aprendido en las futuras ejecuciones de dichas expresiones. Al igual que los comentarios de CE, las recomendaciones del modelo se prueban y se aplican automáticamente a futuras ejecuciones de consultas.

La función de comentarios de expresiones identifica y usa una suposición de modelo que mejor se ajusta a la expresión y la distribución de datos de una consulta determinada, lo cual a su vez mejora la calidad del plan de ejecución de la consulta. Actualmente, la funcionalidad de retroalimentación para expresiones puede identificar operadores del plan en los que el número estimado de filas y el número real de filas son muy diferentes. La retroalimentación se aplica a las expresiones dentro de una consulta cuando se producen errores significativos de estimación del modelo y hay un modelo alternativo viable que se puede probar.

Las distintas versiones del motor de base de datos usan suposiciones de modelo de CE diferentes , en función de cómo se distribuyen y consultan los datos.

Uso de comentarios de CE para expresiones

La retroalimentación del estimador de cardinalidad (CE) para las expresiones supervisa las ejecuciones de consultas e identifica subexpresiones que consistentemente resultan en estimaciones incorrectas de cardinalidad. Los comentarios se generan en función de los patrones observados y se aplican durante la compilación de consultas para mejorar la precisión de la estimación.

Requisitos previos y configuración

Para utilizar el feedback de CE para expresiones, se deben cumplir los siguientes prerrequisitos:

  • La base de datos debe usar el nivel de compatibilidad 160 o posterior.
  • La CE_FEEDBACK_FOR_EXPRESSIONS configuración con ámbito de base de datos debe estar habilitada (habilitada de forma predeterminada).
  • Para comprobar el estado actual de la configuración con ámbito de base de datos:
SELECT name,
       value,
       value_for_secondary
FROM sys.database_scoped_configurations
WHERE name = 'CE_FEEDBACK_FOR_EXPRESSIONS';

La característica se puede habilitar en una base de datos con el siguiente comando de configuración con ámbito de base de datos:

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = ON;

Para deshabilitar la función de retroalimentación de expresiones de una base de datos, deshabilite la CE_FEEDBACK_FOR_EXPRESSIONS configuración con alcance de base de datos:

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = OFF;

Cómo funciona

Aunque las huellas digitales no son un concepto nuevo con el motor de base de datos de SQL Server, una huella digital en el contexto de la característica de comentarios para expresiones hace referencia a la combinación de las firmas calculadas desde dentro de una expresión. Por ejemplo, un analista de negocios en una empresa ficticia podría querer obtener información sobre cualquiera de los pedidos de sus clientes en los que esos clientes gastaron más de $10.000. Una instrucción select que implica la recopilación de datos de una tabla Customers que también se une a una tabla Orders podría ser una manera de ver este tipo de datos:

SELECT *
FROM Customer AS C
     INNER JOIN Orders AS O
         ON C.custkey = O.o_custkey
WHERE O.o_totalprice > 10000;

Para esta consulta, el optimizador de consultas puede elegir obtener datos de cada tabla: Customer, seguido Ordersde , seleccionar todas las columnas asociadas de ambas tablas y combinar los datos (con un filtro) donde el totalprice valor de un pedido es mayor que 10 000 USD. Cada expresión lógica, como un filtro o una combinación dentro de un plan de consulta, genera una firma que contribuye a una huella digital. Los comentarios de CE para expresiones usan estas huellas digitales para aprender y aplicar comentarios entre consultas que comparten subexpresiones similares, incluso si la estructura general de consultas es diferente.

La característica se centra en expresiones con una sobrestimación/infraestimación de cardinalidad coherente a través de consultas. Analiza dos patrones de carga de trabajo diferentes que actualmente no son aptos para los comentarios de CE:

  • Cargas de trabajo sin ejecuciones repetidas, pero con patrones de expresión repetidos. Por ejemplo, un patrón de combinación usado habitualmente.

  • Las consultas en las que una parte de la consulta puede beneficiarse de un modelo de CE diferente a otra parte de la misma consulta. Por ejemplo, la combinación entre tablas A y B podría requerir una contención sencilla y la combinación entre tablas C y D, lo que podría requerir contención base.

La retroalimentación de la función de expresiones aplica suposiciones de filtro y de unión para corregir problemas de estimación incorrecta, como:

Filters:

  • ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES
  • ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES
  • ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES

Joins:

  • ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS
  • Suposición de contención base (no es necesario pasar ninguna sugerencia)

Estas suposiciones reflejan diferentes estrategias de modelo de CE, como la contención y la independencia. Para obtener más información conceptual, vea Comentarios de estimación de cardinalidad explicados por Kate Smith y estimación de cardinalidad para columnas correlacionadas en SQL Server 2016.

Ciclo de vida de las sugerencias

Las indicaciones de retroalimentación progresan por los siguientes estados.

  • Monitorización: el sistema observa ejecuciones repetidas de una subexpresión y realiza un seguimiento de si persiste la mala estimación de cardinalidad.
  • Aplicación: si la estimación incorrecta continúa, se podría generar y aplicar una sugerencia de retroalimentación durante la compilación de consultas para ajustar el modelo de estimación de costos (CE).
  • Bloqueado: si la sugerencia aplicada da como resultado una estimación de cardinalidad poco óptima, se bloquea el uso futuro.

Este ciclo de vida garantiza que los comentarios solo se aplican cuando son beneficiosos y evitan la regresión en la calidad de la estimación.

Protección de regresión

Los comentarios de expertos (CE) sobre expresiones incluyen protección contra regresiones. Si un indicio provoca una peor estimación de cardinalidad que antes, se bloquea. Sin embargo, esta protección se limita a la estimación de cardinalidad y no evalúa el tiempo de ejecución de la consulta. En el caso de las regresiones relacionadas con la ejecución o el tiempo de ejecución, la corrección automática del plan podría intervenir. Si la característica de corrección automática del plan no está habilitada, las acciones que realizaría la característica se registrarán y estarán disponibles consultando la vista de administración dinámica sys.dm_db_tuning_recommendations .

Telemetría y supervisión

La retroalimentación CE para la actividad de las expresiones se puede supervisar mediante las siguientes herramientas.

  • Eventos extendidos:
    • adhoc_ce_feedback_query_level_telemetry
    • query_adhoc_ce_feedback_expression_hint
    • query_adhoc_ce_feedback_hint

Los eventos extendidos de CE Feedback query_ce_feedback_begin_analysis y query_ce_feedback_telemetry también pueden ser útiles al realizar el seguimiento de la actividad de la funcionalidad.

  • Los datos de huellas digitales se almacenan en caché en un administrador de memoria dedicado denominado AdHocCEFeedbackCache. Se puede acceder a esta caché a través de la vista del catálogo del sistema sys.dm_exec_ce_feedback_cache.

  • Integración de Showplan

    Cuando se aplica la realimentación de CE para una sugerencia de expresiones, el plan de consulta incluye un atributo CardinalityFeedback en el XML de Showplan. Esta etiqueta indica que los comentarios se usaron para ajustar la estimación de cardinalidad de una subexpresión específica.

Caché y persistencia

Los comentarios persistentes se almacenan en una tabla interna del Almacén de consultas (sys.plan_persist_ce_feedback_for_expressions) y se vuelven a cargar al iniciarse. Esto garantiza que el sistema no necesite volver a recibir retroalimentación para las huellas dactilares que ya ha encontrado. El mecanismo de persistencia de caché es propenso a pérdidas por naturaleza, lo que significa que los datos solo se persisten en el disco periódicamente. La frecuencia de persistencia no se puede configurar actualmente.

Si la instancia de SQL Server se reinicia o se borra la memoria antes del siguiente ciclo de persistencia, se puede perder la retroalimentación generada desde la última descarga.

Limitations

La persistencia no está disponible actualmente para el Almacén de consultas en réplicas secundarias legibles. La realimentación de CE sobre las expresiones puede aplicar la evaluación de manera diferente en una réplica principal y una réplica secundaria. Sin embargo, la retroalimentación no se conserva en las réplicas secundarias y solo existe dentro de la memoria caché en ese escenario. Si se produce un evento de conmutación por error, se pierden los comentarios que se han aprendido sobre cualquiera de los secundarios legibles.