Compartilhar via


Comentários sobre estimativa de cardinalidade (CE) para expressões

Aplica-se a: SQL Server 2025 (17.x) Banco de Dados SQL do AzureInstância Gerenciada de SQL do Azurebanco de dados SQL no Microsoft Fabric

Estimativas de cardinalidade imprecisas geralmente causam um desempenho ruim durante a otimização da consulta. Os feedbacks de CE (estimativa de cardinalidade) para expressões estendem o framework iniciado pelo recurso de feedback de CE. O objetivo é melhorar as estimativas de cardinalidade para expressões recorrentes. O recurso de feedback para expressões aprende com execuções anteriores de expressões em várias consultas, para encontrar as opções de modelo de CE apropriadas e aplicar o que foi aprendido a execuções futuras dessas expressões. Assim como os comentários da CE, as recomendações de modelo são testadas e aplicadas automaticamente a execuções de consulta futuras.

O recurso feedback para expressões identifica e usa uma suposição de modelo que melhor se ajusta à expressão e à distribuição de dados de uma determinada consulta, o que, por sua vez, melhora a qualidade do plano de execução de consulta. Atualmente, o recurso de comentários para expressões pode identificar operadores de plano em que 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 do modelo e há um modelo alternativo viável para experimentar.

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

Usar comentários de CE para expressões

Os Comentários de CE para Expressões monitoram execuções de consulta e identificam subexpressões que resultam consistentemente em má avaliação de cardinalidade. Feedback é gerado com base nos padrões observados e aplicado durante a compilação de consultas para aumentar a precisão das estimativas.

Pré-requisitos e configuração

Para usar o Feedback de CE para Expressões, 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 com escopo de banco de dados deve ser habilitada (habilitada por padrão).
  • Confira o status atual da configuração de 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 com escopo de banco de dados:

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = ON;

Para desabilitar o recurso de feedback para expressões em um banco de dados, desative a configuração no escopo do 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 novo conceito 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 querer 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 seleção de dados de uma tabela Customers que também faz junção com uma tabela Pedidos 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 essa consulta, o otimizador de consulta pode optar por obter dados de cada tabela - Customerseguido por Orders, selecionar todas as colunas associadas de ambas as tabelas e unir os dados (com um filtro) em que o totalprice pedido é maior que US $ 10.000. Cada expressão lógica, como um filtro ou uma junção em um plano de consulta, gera uma assinatura que contribui para uma impressão digital. O feedback de CE para expressões usa essas assinaturas digitais para aprender e aplicar feedback em consultas que compartilham subexpressões semelhantes, mesmo que a estrutura geral da consulta seja diferente.

O recurso se concentra em expressões com superestimação ou subestimação de cardinalidade de forma consistente ao longo das consultas. Ele analisa dois padrões de carga de trabalho diferentes que atualmente não estão aptos a receber feedback de 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, o que pode exigir contenção de base.

O recurso de comentários para expressões aplica suposições de filtragem e junção para corrigir problemas de má avaliação, 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
  • Assunção de contenção base (não deve ser necessário passar nenhuma dica)

Essas suposições refletem diferentes estratégias de modelo de CE, como contenção e independência. Para obter um contexto mais conceitual, consulte Feedback de Estimativa de Cardinalidade Explicado por Kate Smith e Estimativa de Cardinalidade para Colunas Correlacionadas no SQL Server 2016.

Ciclo de vida da dica

Os comentários sugerem o progresso nos seguintes estados:

  • Monitoramento: O sistema observa execuções repetidas de uma subexpressão e controla se a má avaliação de cardinalidade persiste.
  • Aplicando: se a estimativa incorreta continuar, uma sugestão de feedback poderá 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 abaixo do ideal, ela será bloqueada do uso futuro.

Esse ciclo de vida garante que os comentários só sejam aplicados quando benéficos e evitem a regressão na qualidade da estimativa.

Proteção contra regressão

O feedback de CE para expressões inclui proteção contra regressão. Se uma dica causar uma estimativa de cardinalidade pior do que antes, ela 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/runtime, a correção automática do plano pode intervir. Se o recurso de correção automática de plano não estiver habilitado, as ações que o recurso executaria serão registradas e estarão disponíveis consultando a vista de gerenciamento dinâmico sys.dm_db_tuning_recommendations.

Telemetria e monitoramento

Os comentários do CE para a atividade de expressões podem ser monitorados usando as seguintes ferramentas:

  • Eventos estendidos:
    • adhoc_ce_feedback_query_level_telemetry
    • query_adhoc_ce_feedback_expression_hint
    • query_adhoc_ce_feedback_hint

Os eventos estendidos de feedback do CE query_ce_feedback_begin_analysis e query_ce_feedback_telemetry também podem ser úteis ao acompanhar a atividade da funcionalidade.

  • 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 por meio da exibição do catálogo sys.dm_exec_ce_feedback_cachedo sistema.

  • Integração do Showplan

    Quando um feedback de CE para dicas de expressões é aplicado, o plano de consulta inclui um atributo CardinalityFeedback no XML do Showplan. Essa marca indica que os comentários foram usados 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 comentários sobre impressões digitais que já encontrou. O mecanismo de persistência de cache é intrinsecamente descartável, o que significa que a realimentação é armazenada no disco apenas periodicamente. No momento, a frequência de persistência não é configurável.

Se a instância do SQL Server for reiniciada ou a memória for liberada antes do próximo ciclo de persistência, o feedback gerado desde a última liberação poderá ser perdido.

Limitations

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