Partilhar via


Feedback da estimativa de cardinalidade (CE) para expressões

Aplica-se a: SQL Server 2025 (17.x) Azure SQL Database AzureSQL Managed InstanceSQL database in Microsoft Fabric

Estimativas de cardinalidade imprecisas geralmente causam baixo desempenho durante a otimização da consulta. O feedback de estimativa de cardinalidade (CE) para expressões estende a estrutura iniciada pelo recurso de feedback CE. O objetivo é melhorar as estimativas de cardinalidade para expressões repetidas. O recurso de feedback para expressões aprende com execuções anteriores de expressões em consultas, para encontrar opções de modelo CE apropriadas e aplicar o que foi aprendido a execuções futuras dessas expressões. Como o feedback do CE, as recomendações de modelo são testadas e aplicadas automaticamente a futuras execuções de consultas.

O recurso de feedback para expressões identifica e usa uma suposição de modelo que melhor se adapta à expressão e à distribuição de dados de uma determinada consulta, o que, por sua vez, melhora a qualidade do plano de execução da consulta. Atualmente, o recurso de feedback para expressões pode identificar operadores de plano onde o número estimado de linhas e o número real de linhas são muito diferentes. O feedback é aplicado a expressões dentro de uma consulta quando ocorrem erros significativos de estimativa de modelo, e há um modelo alternativo viável para tentar.

Diferentes versões do Mecanismo de Banco de Dados usam diferentes pressupostos de modelo CE , com base em como os dados são distribuídos e consultados.

Utilizar feedback do CE para expressões

O CE Feedback for Expressions monitora as execuções de consultas e identifica subexpressões que resultam consistentemente em estimativas incorretas de cardinalidade. O feedback é gerado com base nos padrões observados e aplicado durante a compilação da consulta para melhorar a precisão da estimativa.

Pré-requisitos e configuração

Para usar o CE Feedback for Expressions, os seguintes pré-requisitos devem ser atendidos:

  • O banco de dados deve usar o nível de compatibilidade 160 ou posterior.
  • A CE_FEEDBACK_FOR_EXPRESSIONS configuração do escopo do banco de dados deve ser habilitada (habilitada por padrão).
  • Para verificar o status atual da configuração do escopo do banco de dados:
SELECT name,
       value,
       value_for_secondary
FROM sys.database_scoped_configurations
WHERE name = 'CE_FEEDBACK_FOR_EXPRESSIONS';

O recurso pode ser habilitado em um banco de dados com o seguinte comando de configuração de escopo de banco de dados:

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = ON;

Para desativar a função de feedback para expressões, desative a configuração de âmbito de banco de dados CE_FEEDBACK_FOR_EXPRESSIONS.

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = OFF;

Como funciona

Embora as impressões digitais não sejam um conceito novo com o Mecanismo de Banco de Dados do SQL Server, uma impressão digital no contexto do recurso de comentários para expressões refere-se à combinação das assinaturas computadas de dentro de uma expressão. Por exemplo, um analista de negócios em uma empresa fictícia pode desejar obter informações sobre qualquer um dos pedidos de seus clientes em que esses clientes gastaram mais de US $ 10.000. Uma instrução select que envolve a coleta de dados de uma tabela Customers que também está ingressando em uma tabela Orders pode ser uma maneira de exibir esse tipo de dados:

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

Para esta consulta, o otimizador de consulta pode optar por obter dados de cada tabela - Customer, seguido por Orders, selecione todas as colunas associadas de ambas as tabelas e junte os dados (com um filtro) onde o totalprice de uma ordem é maior que $10.000. Cada expressão lógica, como um filtro ou uma associação dentro de um plano de consulta, gera uma assinatura que contribui para uma impressão digital. O Feedback do CE para expressões usa essas impressões digitais para aprender e aplicar comentários em consultas que compartilham subexpressões semelhantes, mesmo que a estrutura geral da consulta seja diferente.

O recurso foca em expressões com superestimação/subestimação consistente de cardinalidade em consultas. Ele analisa dois padrões de carga de trabalho diferentes que atualmente não são elegíveis para feedback do CE:

  • Cargas de trabalho sem execuções repetidas, mas com padrões de expressão repetidos. Por exemplo, um padrão de junção comumente usado.

  • Consultas nas quais uma parte da consulta pode se beneficiar de um modelo CE diferente de outra parte da mesma consulta. Por exemplo, a junção entre tabelas A e B pode exigir contenção simples, e a junção entre tabelas C e D, que pode exigir contenção de base.

O recurso de feedback para expressões aplica suposições de filtro e junção para corrigir problemas de estimativa incorreta, como:

Filtros:

  • ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES
  • ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES
  • ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES

Adesões:

  • ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS
  • Suposição de contenção de base (nenhuma dica precisa ser passada)

Estes pressupostos refletem diferentes estratégias do modelo de CE, como a contenção e a independência. Para obter mais informações conceituais, consulte Estimativa de Cardinalidade e Feedback Explicado por Kate Smith e Estimativa de Cardinalidade para Colunas Correlacionadas no SQL Server 2016.

Ciclo de vida da dica

O feedback sugere o progresso através dos seguintes estados:

  • Monitoramento: O sistema observa execuções repetidas de uma subexpressão e rastreia se a estimativa incorreta de cardinalidade persiste.
  • Aplicação: Se a estimativa incorreta continuar, uma dica de feedback pode ser gerada e aplicada durante a compilação da consulta para ajustar o modelo CE.
  • Bloqueado: Se a dica aplicada resultar em uma estimativa de cardinalidade subótima, ela será bloqueada para uso futuro.

Este ciclo de vida garante que o feedback só é aplicado quando benéfico e evita a regressão na qualidade da estimativa.

Proteção contra regressão

O feedback do CE para expressões inclui proteção contra regressão. Se uma dica provocar uma estimativa de cardinalidade pior do que anteriormente, será bloqueada. No entanto, essa proteção é limitada à estimativa de cardinalidade e não avalia o tempo de execução da consulta. Para regressões relacionadas à execução/tempo de execução, a correção automática do plano pode intervir. Se a funcionalidade de correção automática de plano não estiver ativada, as ações que essa funcionalidade executaria são registradas e podem ser visualizadas ao consultar a exibição de gerenciamento dinâmico sys.dm_db_tuning_recommendations.

Telemetria e monitorização

A atividade do CE Feedback for Expressions pode ser monitorada usando as seguintes ferramentas:

  • Eventos alargados:
    • adhoc_ce_feedback_query_level_telemetry
    • query_adhoc_ce_feedback_expression_hint
    • query_adhoc_ce_feedback_hint

Os eventos CE Feedback estendidos query_ce_feedback_begin_analysis e query_ce_feedback_telemetry também podem ser úteis ao rastrear a atividade do recurso.

  • Os dados de impressão digital são armazenados em cache em um funcionário de memória dedicado chamado AdHocCEFeedbackCache. Esse cache pode ser acessado através da visualização sys.dm_exec_ce_feedback_cachedo catálogo do sistema.

  • Integração com Showplan

    Quando uma dica de feedback do CE para expressões é aplicada, o plano de consulta inclui um atributo CardinalityFeedback na XML do Showplan. Essa tag indica que o feedback foi usado para ajustar a estimativa de cardinalidade para uma subexpressão específica.

Cache e persistência

Os comentários persistentes são armazenados em uma tabela interna do Repositório de Consultas (sys.plan_persist_ce_feedback_for_expressions) e recarregados na inicialização. Isso garante que o sistema não precise reaprender o feedback das impressões digitais que já encontrou. O mecanismo de persistência de cache tem uma natureza perdedora, o que significa que o retorno só é gravado no disco periodicamente. A frequência de persistência não é configurável no momento.

Se a instância do SQL Server for reiniciada ou a memória for limpa antes do próximo ciclo de persistência, o feedback gerado desde o último descarte poderá perder-se.

Limitações

Atualmente, a persistência não está disponível para o Query Store em réplicas secundárias legíveis. O feedback de CE para expressões pode aplicar o feedback de maneira diferente em uma réplica primária e em uma réplica secundária. No entanto, o feedback não é persistente em réplicas secundárias e só existe dentro do cache baseado em memória nesse cenário. Se ocorrer um evento de failover, o feedback aprendido em qualquer um dos secundários legíveis será perdido.