Todos os produtos
Search
Central de documentação

AnalyticDB:Estatísticas

Última atualização: Jun 27, 2026

O otimizador de consultas usa estatísticas para gerar planos de execução. Estatísticas melhores resultam em planos mais eficientes e consultas mais rápidas. O AnalyticDB for MySQL coleta estatísticas automaticamente durante uma janela de manutenção configurável e permite acionar a coleta manualmente a qualquer momento com o comando ANALYZE TABLE.

Edições compatíveis

O recurso de estatísticas é compatível com clusters das edições Enterprise, Basic, Data Lakehouse e Data Warehouse com versão do kernel 3.1.6.1 ou posterior.

Para visualizar e atualizar a versão secundária de um cluster do AnalyticDB for MySQL, faça login no console do AnalyticDB for MySQL e acesse a seção Configuration Information na página Cluster Information.

Tipos de estatísticas

O AnalyticDB for MySQL oferece três tipos de estatísticas. Escolher o tipo adequado para cada coluna equilibra a precisão das estimativas e o uso de cache.

Tipo

O que captura

Mais indicado para

Básica (BASIC)

Valores máximo e mínimo, comprimento médio em bytes, quantidade de valores distintos e proporção de NULL por coluna

Colunas não usadas em filtros ou junções; colunas com dados uniformemente distribuídos, como chaves primárias

Histograma (HISTOGRAM)

Distribuição dos dados em buckets; seleciona automaticamente Histograma Híbrido ou Histograma de Frequência

Colunas com dados assimétricos usadas em filtros ou junções

Grupo de colunas (GROUP_STATS)

Correlação entre múltiplas colunas da mesma tabela

Agregações multicolumn com alta correlação entre colunas

Importante

As estatísticas de grupo de colunas e a coleta por amostragem exigem a versão do kernel 3.1.9.2 ou posterior.

Estatísticas básicas

As estatísticas básicas registram o valor máximo, o valor mínimo, o comprimento médio em bytes, a quantidade de valores distintos e a proporção de NULL de uma coluna. Este é o tipo mais leve de estatística, coletado por varredura completa, amostragem ou atualização incremental (padrão: incremental).

Use estatísticas básicas nos seguintes cenários:

  • Colunas que não participam de operações de filtro ou junção

  • Colunas com distribuição uniforme de dados, como colunas de chave primária

Histograma

Um histograma divide a faixa de dados de uma coluna em buckets. Cada bucket descreve a distribuição dos dados naquele intervalo, oferecendo ao otimizador uma visão mais precisa da frequência de valores do que apenas as estatísticas básicas.

O AnalyticDB for MySQL seleciona automaticamente o tipo de histograma:

  • Histograma Híbrido: Variação do histograma de altura igual que lida com valores de ponto de acesso (hot spots) de forma mais precisa.

  • Histograma de Frequência: Destinado a colunas com poucos valores distintos, em que cada valor único recebe seu próprio bucket.

Use histogramas para colunas com dados assimétricos presentes em cláusulas WHERE ou condições de junção. Para colunas com distribuição uniforme, as estatísticas básicas são suficientes.

Compromisso de cache: Os histogramas oferecem maior precisão, mas consomem mais cache do que as estatísticas básicas. O cache padrão armazena estatísticas para aproximadamente 20.000 colunas com histograma ou 2 milhões de colunas com estatísticas básicas. Em esquemas com muitas tabelas, coletar histogramas para todas as colunas pode reduzir a taxa de acerto do cache.

Estatísticas de grupo de colunas

Importante

As estatísticas de grupo de colunas exigem a versão do kernel 3.1.9.2 ou posterior.

Ao estimar a contagem de linhas para condições multicolumn, o otimizador pressupõe que as colunas sejam independentes. Quando há correlação entre as colunas, essa premissa falha e o otimizador gera estimativas imprecisas, resultando em planos de junção e agregação subotimizados.

As estatísticas de grupo de colunas capturam a correlação entre múltiplas colunas na mesma tabela. Se as colunas forem altamente correlacionadas, essas estatísticas permitem que o otimizador produza estimativas de linhas muito mais precisas.

Use estatísticas de grupo de colunas em agregações multicolumn quando as colunas envolvidas apresentarem forte correlação.

Funcionamento da coleta automática

A coleta automática de estatísticas vem ativada por padrão. O AnalyticDB for MySQL opera em dois modos de coleta:

  • Janela de manutenção: Coleta completa ou por amostragem de estatísticas básicas, histogramas e grupos de colunas, conforme o volume de dados da tabela. Uma coleta completa em muitas colunas pode levar vários dias.

  • Fora da janela de manutenção: Coleta incremental periódica apenas de estatísticas básicas.

Comportamento da coleta por método de importação

Método de importação

Comportamento automático

Ação recomendada

INSERT OVERWRITE (lote)

Estatísticas básicas coletadas imediatamente após a importação

Nenhuma ação necessária

INSERT INTO / REPLACE INTO (tempo real)

Coleta incremental acionada na próxima janela de manutenção ou durante o período de coleta incremental após a conclusão de uma tarefa BUILD

Colete manualmente as estatísticas básicas após a importação

A coleta automática aplica-se somente a tabelas internas. A coleta manual abrange tanto tabelas internas quanto externas.

Limiar de volume de dados e amostragem

Importante

A coleta por amostragem exige a versão do kernel 3.1.9.2 ou posterior.

Por padrão, tabelas que ultrapassam 5.000.000.000 de linhas (5 bilhões) desencadeiam comportamentos diferentes dependendo da versão do kernel:

  • Versão do kernel anterior à 3.1.9.2: A coleta de estatísticas ignora a tabela.

  • Versão do kernel 3.1.9.2 ou posterior: As estatísticas são coletadas por amostragem.

Configure a coleta automática

Ative ou desative a coleta automática de estatísticas

A coleta automática de estatísticas está ativada por padrão. Para desativá-la ou reativá-la:

SET adb_config O_CBO_AUTONOMOUS_STATS_ENABLED = [false|true];

Ative ou desative a coleta de estatísticas de grupo de colunas

Importante

A coleta de estatísticas de grupo de colunas requer a versão do kernel 3.1.9.2 ou posterior, e a coleta automática de estatísticas deve estar ativada.

A coleta de estatísticas de grupo de colunas vem desativada por padrão. Para ativá-la ou desativá-la:

SET adb_config O_CBO_MAINTENANCE_WINDOW_COLLECT_GROUP_STATS_ENABLED = [false|true];

Defina a janela de manutenção

A janela de manutenção padrão é das 04:00 às 05:00, seguindo o fuso horário do cluster. Configure-a para horários de baixa demanda a fim de minimizar o impacto no desempenho das consultas.

Restrições:

  • O intervalo entre os horários de início e fim deve ser de no mínimo 1 minuto e no máximo 3 horas.

  • O horário de início deve ser anterior ao horário de término.

  • Um horário inválido reverte para o padrão.

SET adb_config O_CBO_MAINTENANCE_WINDOW_DURATION = [04:00-05:00];

Defina o limiar de volume de dados

Para alterar o limiar de contagem de linhas que aciona a amostragem (padrão: 5.000.000.000):

SET adb_config O_CBO_MAINTENANCE_WINDOW_COLLECTOR_ROW_LIMIT = 10000;

Ative ou desative a limitação de E/S

Durante a janela de manutenção, o AnalyticDB for MySQL aplica limitação de E/S para restringir o uso de recursos durante a varredura das tabelas. Essa limitação vem ativada por padrão. Caso os recursos estejam ociosos durante a janela de manutenção, desative a limitação para acelerar a coleta:

SET adb_config O_CBO_AUTONOMOUS_STATS_SCAN_RATE_LIMIT_ENABLED = [false|true];

Execute a coleta em um grupo de recursos específico

Por padrão, a coleta automática é executada sob uma conta do sistema. Para executá-la em um grupo de recursos específico, especifique uma conta de banco de dados:

SET adb_config O_CBO_AUTONOMOUS_STATS_ACCOUNT = [user_name];

A conta especificada deve ter permissões de consulta em todas as colunas de todas as tabelas e estar vinculada a um grupo de recursos. Para mais detalhes, consulte Crie e gerencie grupos de recursos.

Defina a taxa de expiração

As estatísticas são consideradas expiradas quando a fração de linhas modificadas por operações UPDATE, DELETE, INSERT ou REPLACE ultrapassa a taxa de expiração. Estatísticas expiradas são totalmente recoletadas na próxima janela de manutenção.

A taxa de expiração padrão é 0,1 (10%). Para ajustá-la:

SET adb_config O_CBO_STATS_EXPIRED_RATIO = 0.1;

Faixa válida: 0–1. Evite definir este valor acima de 0,5.

Coletar estatísticas manualmente

Use o comando ANALYZE TABLE para coletar estatísticas sob demanda. A coleta manual aplica-se tanto a tabelas internas quanto externas.

Para tabelas grandes, prefira a amostragem (WITH ENABLE SAMPLING) em vez de uma varredura completa. Execute a coleta de tabela inteira durante horários de baixa demanda quando a amostragem não estiver disponível.

Coletar estatísticas de uma tabela

ANALYZE TABLE [schema_name.]table_name [UPDATE [BASIC|HISTOGRAM|GROUP_STATS]] [ON column_name[,...]] [WITH ENABLE SAMPLING]

Parâmetro

Obrigatório

Descrição

schema_name

Não

Nome do banco de dados.

table_name

Sim

Tabela a ser analisada. Cada instrução pode especificar apenas uma tabela. Compatível com tabelas internas e externas.

`UPDATE [BASIC

HISTOGRAM

GROUP_STATS]`

Não

Tipo de estatística a ser coletada. O padrão é BASIC. GROUP_STATS exige a versão do kernel 3.1.9.2 ou posterior.

ON column_name[,...]

Não

Colunas a serem analisadas. Omita para analisar todas as colunas.

WITH ENABLE SAMPLING

Não

Realiza a coleta por amostragem em vez de varredura completa. Exige a versão do kernel 3.1.9.2 ou posterior.

Exemplos

Colete estatísticas básicas em todas as colunas de adb_demo.customer:

ANALYZE TABLE adb_demo.customer;
-- Equivalent:
ANALYZE TABLE adb_demo.customer UPDATE BASIC;

Colete estatísticas básicas apenas na coluna customer_id:

ANALYZE TABLE adb_demo.customer UPDATE BASIC ON customer_id;

Colete estatísticas de histograma em customer_id e login_time:

ANALYZE TABLE adb_demo.customer UPDATE HISTOGRAM ON customer_id, login_time;

Colete estatísticas de grupo de colunas por amostragem em customer_id e login_time:

ANALYZE TABLE adb_demo.customer UPDATE GROUP_STATS ON customer_id, login_time WITH ENABLE SAMPLING;

Coletar estatísticas de partições

A coleta de estatísticas no nível de partição é compatível com clusters das edições Enterprise, Basic e Data Lakehouse com versão do kernel 3.1.9.1 ou posterior. Esse processo realiza uma coleta completa de estatísticas básicas nas partições de tabelas externas do OSS.
ANALYZE TABLE table_name WITH PARTITIONS = ARRAY[ARRAY[PARTITION_KEYS] [, PARTITION_KEYS, ...]]

Parâmetro

Obrigatório

Descrição

table_name

Sim

Tabela a ser analisada. Cada instrução pode especificar apenas uma tabela.

PARTITION_KEYS

Sim

Partições a serem analisadas.

Exemplos

Colete estatísticas das partições 2023-01 e 2023-02 da tabela test1:

ANALYZE TABLE test1 WITH PARTITIONS = ARRAY[ARRAY['2023-01'], ARRAY['2023-02']];

Colete estatísticas das partições (1,1) e (1,0) da tabela test2:

ANALYZE TABLE test2 WITH PARTITIONS = ARRAY[ARRAY[1, 1], ARRAY[1, 0]];

Visualize estatísticas

As estatísticas são armazenadas em formato binário. Consulte as tabelas do sistema INFORMATION_SCHEMA para inspecioná-las.

Visualize estatísticas no nível da tabela:

SELECT * FROM INFORMATION_SCHEMA.TABLE_STATISTICS;

Visualize estatísticas no nível da coluna (básicas, histograma e grupo de colunas):

SELECT * FROM INFORMATION_SCHEMA.COLUMN_STATISTICS;

Perguntas frequentes

Por que o ANALYZE aparece como uma consulta lenta?

Instruções ANALYZE executadas durante a janela de manutenção operam com limitação de E/S e baixa prioridade de CPU. Isso significa que podem durar longos períodos e ser sinalizadas como consultas lentas, mas tal comportamento não afeta o desempenho das consultas regulares. Os recursos são alocados preferencialmente para consultas de usuários assim que chegam.

Se a carga da CPU não estiver elevada fora da janela de manutenção, ignore o sinalizador de consulta lenta. Caso a sobrecarga da CPU esteja afetando o tempo de resposta das consultas, siga as etapas de solução de problemas abaixo.

O que causa alta carga de CPU durante a coleta de estatísticas?

Existem duas causas comuns:

  • Durante a janela de manutenção (04:00–05:00 por padrão): O sistema realiza uma varredura completa da tabela para coletar estatísticas das colunas. Isso eleva temporariamente a utilização da CPU.

  • Após uma atualização de versão secundária para 3.1.6 ou posterior em clusters da edição Data Warehouse: Se o cluster for atualizado de uma versão anterior, o AnalyticDB for MySQL executa uma coleta completa única. A carga da CPU pode ficar elevada nos primeiros dias, retornando ao normal após a conclusão da varredura inicial.

Em ambos os casos, verifique se o tempo médio de resposta das consultas foi realmente afetado. Como o ANALYZE roda com baixa prioridade de CPU, picos de utilização durante a coleta não significam que as consultas estão sendo privadas de recursos.

O que fazer se a coleta de estatísticas estiver degradando o desempenho das consultas?

Tente estas etapas em ordem:

  1. Reagende a janela de manutenção para seus horários reais de baixa demanda:

    SET adb_config O_CBO_MAINTENANCE_WINDOW_DURATION = [04:00-05:00];
  2. Ajuste o limite de E/S para consultas do sistema caso não consiga identificar uma janela clara de baixa demanda. Recomendamos alterar o limite de E/S para um valor maior ou igual a 16 MB. O padrão é 50 MB:

    SET adb_config CSTORE_IO_LIMIT_SYSTEM_QUERY_BPS = 52428800;
  3. Isole a coleta em um grupo de recursos de baixa prioridade para evitar competição com consultas de usuários:

    SET adb_config O_CBO_AUTONOMOUS_STATS_ACCOUNT = [user_name];
  4. Aumente a taxa de expiração para reduzir a quantidade de dados recoletados a cada ciclo. O padrão é 0,1; evite definir acima de 0,5:

    SET adb_config O_CBO_STATS_EXPIRED_RATIO = 0.1;

Se nenhuma das opções acima resolver o problema, desative a coleta automática e mude para a coleta manual:

SET adb_config O_CBO_AUTONOMOUS_STATS_ENABLED = false;

Após desativar, colete estatísticas manualmente usando ANALYZE TABLE. Sem a coleta automática, as estatísticas podem ficar desatualizadas, o que pode degradar a qualidade dos planos de consulta ao longo do tempo.

Por que as estatísticas não foram atualizadas por vários dias?

Duas explicações prováveis:

  • As estatísticas ainda não expiraram. Elas expiram apenas quando a fração de linhas modificadas (por UPDATE, DELETE, INSERT ou REPLACE) cruza a taxa de expiração (padrão: 10%). Se as alterações nos dados forem pequenas em relação ao tamanho total da tabela, as estatísticas são consideradas atuais e não são recoletadas.

  • Esquemas grandes levam mais de um dia. O sistema aloca cerca de 1 hora por dia para coleta de estatísticas não incrementais. Se um cluster tiver mais de 1.000 colunas, uma passagem completa pode levar até uma semana. Esse comportamento é esperado — as consultas continuam rodando e as estatísticas são atualizadas conforme o ciclo é concluído.

As estatísticas são coletadas automaticamente quando dados são importados para uma nova tabela?

Depende do método de importação:

  • INSERT OVERWRITE (importação em lote): As estatísticas básicas são coletadas automaticamente logo após a conclusão da importação.

  • INSERT INTO ou REPLACE INTO (importação em tempo real): As estatísticas são coletadas na próxima janela de manutenção ou durante o período de coleta incremental após a conclusão de uma tarefa BUILD. Execute ANALYZE TABLE imediatamente após a importação para coletar estatísticas básicas sem demora.