Estatísticas no armazenamento de dados do Fabric

Aplica-se a: ponto de extremidade de análise do 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. Em seguida, com base no custo de cada plano, ele escolhe aquele com a menor quantidade de trabalho estimado. Estatísticas são objetos que contêm informações relevantes sobre seus dados, para permitir que o otimizador de consulta estime esses custos.

Como aproveitar as estatísticas

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

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 remover estatísticas de coluna única baseadas em histograma com CREATE STATISTICS, UPDATE STATISTICS e DROP STATISTICS, respectivamente. Os usuários também podem exibir o conteúdo das estatísticas de coluna única baseadas em histograma com SHOW_STATISTICS DBCC. Atualmente, há suporte para uma versão limitada dessas instruções.

  • Se estiver criando estatísticas manualmente, considere focar nas que são usadas fortemente em sua carga de trabalho de consulta (especificamente em GROUP BYs, ORDER BYs, filtros e JOINs).
  • Considere atualizar estatísticas de nível de coluna regularmente após alterações de dados que alteram significativamente a contagem de linhas ou a distribuição dos dados.

Exemplos de manutenção de estatísticas manuais

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

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

Para atualizar manualmente o objeto DimCustomer_CustomerKey_FullScan de 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ísticas:

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

Para remover manualmente o objeto de estatísticas DimCustomer_CustomerKey_FullScan:

DROP STATISTICS dbo.DimCustomer.DimCustomer_CustomerKey_FullScan;

Os seguintes objetos T-SQL também podem ser usados para verificar estatísticas criadas manualmente e criadas 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 exploração de planos, o Microsoft Fabric criará automaticamente essas estatísticas se elas ainda não existirem. Depois que as estatísticas forem criadas, o otimizador de consulta poderá utilizá-las para estimar os custos do plano da consulta de gatilho. 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 alterações significativas de dados tiverem ocorrido desde a última atualização de estatísticas.

Verificar estatísticas automáticas em tempo de consulta

Há 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 disparará a criação se as estatísticas ainda não existirem para COLUMN_NAME. Por exemplo:

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

Nesse 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 da coluna criadas. Se você quiser validar se as estatísticas foram criadas automaticamente, poderá 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;

Essa consulta procura apenas estatísticas baseadas em coluna. Se você quiser ver todas as estatísticas que existem para essa tabela, remova os JOINs em sys.stats_columns e sys.columns.

Agora, você pode encontrar o statistics_name da 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 valor Updated no conjunto de resultados de SHOW_STATISTICS DBCC 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 de consulta. O mesmo exercício de exemplo anterior pode ser aplicado depois de alterar significativamente a tabela. No Fabric, o mecanismo de consulta SQL usa o mesmo limite de recompilação que o 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 em tempo de consulta
    • Esses objetos contêm informações de histograma e densidade sobre a distribuição de uma coluna específica. Semelhante às estatísticas criadas automaticamente em tempo de consulta em pools dedicados do Azure Synapse Analytics.
    • O nome começa com _WA_Sys_.
    • O conteúdo pode ser exibido com o DBCC SHOW_STATISTICS
  • Estatísticas de comprimento médio da coluna
    • Criado para colunas de caracteres variáveis (char e varchar) superiores a 100 e que precisam do comprimento médio da coluna em tempo de consulta.
    • 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 exibidos e não podem ser acionados pelo usuário.
  • Estatísticas de cardinalidade baseadas em tabela
    • Criado por tabela que precisa de estimativa de cardinalidade em tempo de consulta.
    • Esses objetos contêm uma estimativa da contagem de linhas de uma tabela.
    • Intitulado ACE-Cardinality.
    • Os conteúdos não podem ser exibidos e não podem ser acionados pelo usuário.

Limitações

  • Somente estatísticas de histograma de coluna única podem ser criadas e modificadas manualmente.
  • Não há suporte para a criação de estatísticas de 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.