Partilhar via


Estatísticas no armazenamento de dados de malha

Aplica-se a: ponto de extremidade de análise SQL e Warehouse no Microsoft Fabric

O Warehouse no Microsoft Fabric usa um mecanismo de consulta para criar um plano de execução para uma determinada consulta SQL. Quando você envia uma consulta, o otimizador de consulta tenta enumerar todos os planos possíveis e escolher o candidato mais eficiente. Para determinar qual plano exigiria a menor sobrecarga (E/S, CPU, memória), o mecanismo precisa ser capaz de avaliar a quantidade de trabalho ou linhas que podem ser processadas em cada operador. Depois, com base no custo de cada plano, escolhe aquele com menor quantidade de trabalho estimado. As estatísticas são objetos que contêm informações relevantes sobre seus dados, para permitir que o otimizador de consultas estime esses custos.

Como alavancar as estatísticas

Para obter um desempenho de consulta ideal, é importante ter estatísticas precisas. Atualmente, o Microsoft Fabric oferece suporte aos seguintes caminhos para fornecer estatísticas relevantes e atualizadas:

  • Estatísticas definidas pelo utilizador
  • Estatísticas automáticas

Estatísticas manuais para todas as tabelas

A opção tradicional de manter a integridade das estatísticas está disponível no Microsoft Fabric. Os usuários podem criar, atualizar e descartar estatísticas de coluna única baseadas em histograma com CREATE STATISTICS, UPDATE STATISTICS e DROP STATISTICS, respectivamente. Os usuários também podem visualizar o conteúdo de estatísticas de coluna única baseadas em histograma com DBCC SHOW_STATISTICS. Atualmente, uma versão limitada dessas instruções é suportada.

  • Se criar estatísticas manualmente, considere concentrar-se naquelas muito usadas em sua carga de trabalho de consulta (especificamente em GROUP BYs, ORDER BYs, filtros e JOINs).
  • Considere atualizar estatísticas em nível de coluna regularmente após alterações de dados que alterem significativamente a contagem de linhas ou a distribuição dos dados.

Exemplos de manutenção manual de estatísticas

Para criar estatísticas na dbo.DimCustomer tabela, com base em todas as linhas de uma coluna CustomerKey:

CREATE STATISTICS DimCustomer_CustomerKey_FullScan
ON dbo.DimCustomer (CustomerKey) WITH FULLSCAN;

Para atualizar manualmente o objeto DimCustomer_CustomerKey_FullScande estatísticas , talvez após uma grande atualização de dados:

UPDATE STATISTICS dbo.DimCustomer (DimCustomer_CustomerKey_FullScan) WITH FULLSCAN;  

Para mostrar informações sobre o objeto de estatísticas:

DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan");

Para mostrar apenas informações sobre o histograma do objeto de estatística:

DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan") WITH HISTOGRAM;

Para soltar manualmente o objeto DimCustomer_CustomerKey_FullScanstatistics :

DROP STATISTICS dbo.DimCustomer.DimCustomer_CustomerKey_FullScan;

Os seguintes objetos T-SQL também podem ser usados para verificar estatísticas criadas manualmente e automaticamente no Microsoft Fabric:

Estatísticas automáticas na consulta

Sempre que você emitir uma consulta e o otimizador de consulta exigir estatísticas para a exploração do plano, o Microsoft Fabric criará automaticamente essas estatísticas se elas ainda não existirem. Uma vez que as estatísticas tenham sido criadas, o otimizador de consulta pode utilizá-las para estimar os custos do plano da consulta de acionamento. Além disso, se o mecanismo de consulta determinar que as estatísticas existentes relevantes para a consulta não refletem mais com precisão os dados, essas estatísticas serão atualizadas automaticamente. Como essas operações automáticas são feitas de forma síncrona, você pode esperar que a duração da consulta inclua esse tempo se as estatísticas necessárias ainda não existirem ou se tiverem ocorrido alterações significativas nos dados desde a última atualização de estatísticas.

Verificar estatísticas automáticas no momento da consulta

Existem vários casos em que você pode esperar algum tipo de estatística automática. As mais comuns são estatísticas baseadas em histograma, que são solicitadas pelo otimizador de consulta para colunas referenciadas em GROUP BYs, JOINs, cláusulas DISTINCT, filtros (cláusulas WHERE) e ORDER BYs. Por exemplo, se você quiser ver a criação automática dessas estatísticas, uma consulta acionará a criação se as estatísticas para COLUMN_NAME ainda não existirem. Por exemplo:

SELECT <COLUMN_NAME>
FROM <YOUR_TABLE_NAME>
GROUP BY <COLUMN_NAME>;

Neste caso, você deve esperar que as estatísticas para COLUMN_NAME tenham sido criadas. Se a coluna também fosse uma coluna varchar, você também veria estatísticas de comprimento médio de coluna criadas. Se quiser validar que as estatísticas foram criadas automaticamente, você pode executar a seguinte consulta:

select
    object_name(s.object_id) AS [object_name],
    c.name AS [column_name],
    s.name AS [stats_name],
    s.stats_id,
    STATS_DATE(s.object_id, s.stats_id) AS [stats_update_date], 
    s.auto_created,
    s.user_created,
    s.stats_generation_method_desc 
FROM sys.stats AS s 
INNER JOIN sys.objects AS o 
ON o.object_id = s.object_id 
INNER JOIN sys.stats_columns AS sc 
ON s.object_id = sc.object_id 
AND s.stats_id = sc.stats_id 
INNER JOIN sys.columns AS c 
ON sc.object_id = c.object_id 
AND c.column_id = sc.column_id
WHERE o.type = 'U' -- Only check for stats on user-tables
    AND s.auto_created = 1
    AND o.name = '<YOUR_TABLE_NAME>'
ORDER BY object_name, column_name;

Esta consulta procura apenas estatísticas baseadas em colunas. Se quiser ver todas as estatísticas existentes para esta tabela, remova as JOINs em sys.stats_columns e sys.columns.

Agora, você pode encontrar a statistics_name estatística de histograma gerada automaticamente (deve ser algo como _WA_Sys_00000007_3B75D760) e executar o seguinte T-SQL:

DBCC SHOW_STATISTICS ('<YOUR_TABLE_NAME>', '<statistics_name>');

Por exemplo:

DBCC SHOW_STATISTICS ('sales.FactInvoice', '_WA_Sys_00000007_3B75D760');

O Updated valor no conjunto de resultados do DBCC SHOW_STATISTICS deve ser uma data (em UTC) semelhante a quando você executou a consulta GROUP BY original.

Essas estatísticas geradas automaticamente podem ser aproveitadas em consultas subsequentes pelo mecanismo de consulta para melhorar o custo do plano e a eficiência de execução. Se ocorrerem alterações suficientes na tabela, o mecanismo de consulta também atualizará essas estatísticas para melhorar a otimização da consulta. O mesmo exercício de amostra anterior pode ser aplicado depois de alterar significativamente a tabela. Na Malha, o mecanismo de consulta SQL usa o mesmo limite de recompilação do SQL Server 2016 (13.x) para atualizar estatísticas.

Tipos de estatísticas geradas automaticamente

No Microsoft Fabric, há vários tipos de estatísticas que são geradas automaticamente pelo mecanismo para melhorar os planos de consulta. Atualmente, eles podem ser encontrados em sys.stats , embora nem todos sejam acionáveis:

  • Estatísticas de histograma
    • Criado por coluna que precisa de estatísticas de histograma no momento da consulta
    • Esses objetos contêm histograma e informações de densidade sobre a distribuição de uma coluna específica. Semelhante às estatísticas criadas automaticamente no querytime nos pools dedicados do Azure Synapse Analytics.
    • O nome começa com _WA_Sys_.
    • Os conteúdos podem ser visualizados com DBCC SHOW_STATISTICS
  • Estatísticas de comprimento médio de coluna
    • Criado para colunas de caracteres variáveis (varchar) maiores que 100 que precisam de comprimento médio de coluna no querytime.
    • Esses objetos contêm um valor que representa o tamanho médio da linha da coluna varchar no momento da criação das estatísticas.
    • O nome começa com ACE-AverageColumnLength_.
    • Os conteúdos não podem ser visualizados e não podem ser utilizados pelo utilizador.
  • Estatísticas de cardinalidade baseadas em tabelas
    • Criado por tabela que precisa de estimativa de cardinalidade no momento da consulta.
    • Esses objetos contêm uma estimativa da contagem de linhas de uma tabela.
    • Nomeado ACE-Cardinality.
    • Os conteúdos não podem ser visualizados e não podem ser utilizados pelo utilizador.

Limitações

  • Apenas as estatísticas de histograma de coluna única podem ser criadas e modificadas manualmente.
  • Não há suporte para a criação de estatísticas com várias colunas.
  • Outros objetos de estatísticas podem aparecer em sys.stats, além de estatísticas criadas manualmente e estatísticas criadas automaticamente. Esses objetos não são usados para otimização de consulta.