Todos os produtos
Search
Central de documentação

PolarDB:Automatic IMCI-based query acceleration (AutoIndex)

Última atualização: Jun 28, 2026

O IMCI do PolarDB for MySQL oferece o AutoIndex, recurso que acelera automaticamente consultas SQL lentas ao criar índices colunares.

Visão geral

O IMCI do PolarDB for MySQL foi projetado para consultas complexas em grandes conjuntos de dados, típicas de cenários OLAP. Com o IMCI, o PolarDB for MySQL integra processamento transacional e análise de dados em tempo real como uma solução HTAP completa.

image

Tradicionalmente, acelerar consultas lentas exige adicionar manualmente COLUMNAR=1 ao campo COMMENT da tabela usando CREATE TABLE ou ALTER TABLE. Essa abordagem é ineficiente quando há muitos modelos SQL com lógica complexa.

O AutoIndex automatiza esse processo ao criar índices colunares nas tabelas referenciadas por consultas lentas.

Contexto técnico

O AutoIndex ajusta o desempenho de SQL ao adicionar índices automaticamente. Para índices row-store, essa prática é amplamente estudada e implementada no Oracle e SQL Server. Esses sistemas analisam predicados, cláusulas ORDER BY ou operações JOIN para identificar possíveis índices secundários, recalculam o custo da consulta com o índice proposto e criam aqueles que reduzem significativamente esse custo.

No caso de índices colunares, o AutoIndex é adotado por Redshift, Snowflake, Databricks e Heatwave. As técnicas mais comuns incluem:

  • Carregamento e descarregamento automáticos: Crie índices colunares com base no histórico de consultas e remove índices pouco utilizados ou que consomem muitos recursos para economizar armazenamento.

  • Codificação automática: Selecione a codificação ideal por coluna conforme a distribuição dos dados para compactar o armazenamento.

  • Seleção automática de chaves de distribuição: Equilibra os dados em cenários MPP para reduzir skew e otimizar o shuffling em operações distribuídas de GROUP BY e JOIN.

  • Seleção automática de chaves de ordenação: Acelera filtragem e classificação utilizando predicados comuns ou colunas de join/ordenação.

A criação de índices colunares no IMCI tem menor custo e maior tolerância a falhas do que em índices row-store:

  • Menor impacto em escritas: Índices row-store degradam o desempenho de escrita no nó primário. O IMCI não materializa dados column-store no nó primário — novos índices colunares são sincronizados com o nó IMCI somente leitura via Redo logs, com impacto mínimo nas escritas.

  • Maior taxa de compactação: Índices colunares geralmente atingem compactação de 3x a 5x, tornando pequeno o overhead de armazenamento dos novos índices.

  • Impacto limitado nas operações de negócio: Estruturas de dados lock-free coletam informações de trace SQL, e DDLs nonblocking minimizam interrupções nas operações.

Funcionamento

Rastreamento de consultas lentas e geração de instruções DDL

Cada nó do cluster usa SQL Trace para coletar consultas lentas e gerar instruções DDL para índices colunares:

  1. SQL Trace: Utiliza uma hash table MySQL lock-free para rastrear execuções SQL por modelo. É adequado para cenários de alta concorrência com muitos modelos SQL. O impacto no desempenho é ≤3% em testes Sysbench.

  2. Condição de gatilho: Quando as linhas verificadas por uma consulta lenta atingem um limiar configurado, o AutoIndex gera uma DDL para adicionar um índice colunar à tabela correspondente.

  3. Design de baixo overhead: O AutoIndex reutiliza a lista de tabelas em cache do THD, evitando parsing repetitivo de SQL e aquisição de MDL com overhead próximo de zero.

Consulte a tabela de sistema information_schema.imci_autoindex em qualquer nó para visualizar as consultas lentas rastreadas e as instruções DDL geradas:

SELECT * FROM information_schema.imci_autoindex

Para obter informações detalhadas sobre a execução de SQL, consulte information_schema.sql_sharing:

SELECT *
FROM information_schema.imci_autoindex autoindex, information_schema.sql_sharing share
WHERE autoindex.sql_id = share.sql_id
  AND share.type = 'SQL'

Coleta e agregação de consultas lentas e execução de DDL

Um nó IMCI somente leitura atua como líder, coletando e agregando recomendações de consultas lentas de todos os nós. Ele classifica as recomendações por tempo de execução (ordem decrescente) e executa as instruções DDL sequencialmente até atingir o limiar por rodada.

  • Instant DDL

    Adicionar um índice colunar no nó primário é uma Instant DDL — atualiza apenas o dicionário de dados. O Redo log é replicado para o nó IMCI somente leitura, que constrói o índice em segundo plano.

  • Nonblocking DDL

    Uma DDL padrão bloqueia novas transações durante a aquisição de um lock MDL-X. A Nonblocking DDL permite que novas transações prossigam se a aquisição do lock falhar, tentando novamente mais tarde. Como as DDLs do AutoIndex não são urgentes, aquelas que falharem serão tentadas novamente nas rodadas de agendamento subsequentes.

    Consulte information_schema.imci_autoindex_executed pelo endpoint do cluster para visualizar recomendações recentes de índices bem-sucedidas e as consultas lentas associadas (até 128 registros retidos).

  • Limites de agendamento e execução

    • Por padrão, o intervalo entre rodadas é de 1 minuto, com execução máxima de 5 instruções DDL por rodada.

    • Recomendações não executadas só são tentadas novamente quando a consulta lenta correspondente volta a ocorrer.

    • A governança de recursos aplica-se durante a construção do índice — o uso aumenta, mas os recursos do nó não são saturados.

    • A próxima rodada inicia somente após a conclusão da construção de todos os índices da rodada atual no nó IMCI somente leitura.

Ativação e uso de índices colunares

Para maximizar a eficácia do AutoIndex, anexe o nó IMCI somente leitura ao endpoint do cluster e ative o roteamento automático de linhas/colunas. Consultas lentas disparam a criação de índices colunares e, uma vez construídos, o mecanismo de roteamento direciona as consultas elegíveis para o nó IMCI com base no custo.

Se sua aplicação se conectar diretamente a um nó comum somente leitura, alterne manualmente o tráfego para o nó IMCI somente leitura após a criação do índice colunar. O status dos índices colunares e as políticas de roteamento estão detalhados em Perguntas frequentes sobre IMCI.

Resultados de testes

O exemplo a seguir utiliza o conjunto de testes TPC-H de 100 GB.

Nota

A implementação do TPC-H descrita neste tópico baseia-se no benchmark TPC-H, mas não está em conformidade com todos os requisitos do TPC-H. Os resultados de teste apresentados aqui não são comparáveis aos resultados oficiais publicados do benchmark TPC-H.

  • Configuração do ambiente: Execute todas as 22 consultas TPC-H a cada minuto. Ative a HTAP Optimization (Transactional/Analytical Processing Splitting) no endpoint do cluster. Defina o grau de paralelismo do row-store como 8 (para reduzir a duração do teste).

  • Resultados do teste: O desempenho das consultas melhorou significativamente nas rodadas subsequentes. Ao final da rodada 1 (por volta da 12ª consulta), o AutoIndex já havia criado índices colunares para a maioria das tabelas, e o otimizador roteou essas consultas para o nó IMCI somente leitura.

Rodada de execução

Tempo total (s)

Planos row/column

Ganho de desempenho

1

8.293

10 / 12

-

2

118

1 / 21

Aprox. 70x

3

110

0 / 22

Aprox. 75x

Benefícios

O IMCI oferece vantagens em compatibilidade, desempenho e custo:

  • Totalmente compatível com MySQL: Suporta todos os tipos de dados e o protocolo MySQL.

  • Excelente desempenho HTAP: Proporciona ganhos de desempenho de 10x a 100x para cargas analíticas.

  • Armazenamento híbrido econômico: O armazenamento híbrido garante consistência transacional; índices colunares oferecem desempenho superior a um custo menor para consultas analíticas.

  • Aceleração automática com um clique: Ativação simples, sem necessidade de configurações ou ajustes complexos.

  • Redução de overhead operacional: Crie índices colunares automaticamente para consultas lentas, eliminando a otimização manual.

  • Menores custos de TI: Crie índices colunares apenas para consultas lentas — não para todas as tabelas — economizando memória e armazenamento.

Versões suportadas

  • Os clusters da **Enterprise Edition** devem atender às seguintes condições:

    • Series: Cluster Edition.

    • Versão do mecanismo de banco de dados:

      • MySQL 8.0.1, com revisão 8.0.1.1.45.2 ou posterior.

      • MySQL 8.0.2, com revisão 8.0.2.2.27 ou posterior.

  • Os clusters da **Standard Edition** devem atender às seguintes condições:

    • CPU architecture: X86.

    • Versão do mecanismo de banco de dados: MySQL 8.0.1, com revisão 8.0.1.1.45.2 ou posterior.

  • Nota

    Para verificar a versão do seu cluster, consulte Consultar a versão do mecanismo.

    Observações de uso

    • O AutoIndex não é suportado em clusters da Multi-master Cluster (Limitless) Edition nem em clusters Serverless.

    • Após ativar o AutoIndex:

      • Os nós IMCI somente leitura seguem as mesmas regras de faturamento dos nós de computação comuns.

      • O sistema cria índices colunares com base em consultas SQL lentas. Esses dados consomem espaço de armazenamento.

      • O recurso SQL Trace registra o histórico de execução de SQL lento, com um overhead típico de desempenho ≤3% por nó.

    • O AutoIndex utiliza nonblocking DDL para adicionar índices colunares, garantindo que novas transações ainda possam acessar a tabela alvo mesmo que não seja possível obter um lock MDL-X.

    Ativar o AutoIndex

    1. Faça login no console do PolarDB. No painel de navegação à esquerda, clique em Clusters, selecione a Region onde o cluster está localizado e clique no ID do cluster desejado para acessar a página de detalhes do cluster.

    2. Na página Basic Information, localize o campo Automatic IMCI-based Query Acceleration e clique em Enable.

    3. A próxima etapa depende se o seu cluster possui um nó IMCI somente leitura:

      • Se o cluster já tiver um nó IMCI somente leitura, clique em OK na caixa de diálogo Enable Automatic IMCI-based Query Acceleration para ativar o recurso.

      • Caso o cluster não possua um nó IMCI somente leitura, clique em OK na caixa de diálogo Enable Automatic IMCI-based Query Acceleration. Você será redirecionado para a página de adição de um nó IMCI somente leitura.

        Nota
        • É possível adicionar um nó IMCI somente leitura imediatamente após clicar em OK, ou você pode adicionar um nó IMCI somente leitura manualmente mais tarde.

        • Após ativar este recurso, seu cluster deve conter pelo menos um nó IMCI somente leitura. Caso contrário, mesmo que o status de Automatic IMCI-based Query Acceleration esteja como Enable, a aceleração de consultas não estará ativa.

        • Sem um nó IMCI somente leitura, o sistema registra o histórico de execução de SQL lento via SQL Trace, mas não cria índices colunares — nenhuma aceleração ocorre.

    Desativar o AutoIndex

    1. Faça login no console do PolarDB, clique em Clusters no painel de navegação à esquerda, selecione a Region onde o cluster está localizado e clique no ID do cluster desejado para acessar a página de detalhes do cluster.

    2. Na página Basic Information, localize o campo Automatic IMCI-based Query Acceleration e clique em Close.

    3. Na caixa de diálogo Disable Automatic IMCI-based Query Acceleration, clique em OK para desativar o recurso.

    Nota

    Desativar o AutoIndex desliga o recurso, mas não remove os nós IMCI somente leitura existentes nem seus dados. Para removê-los, exclua os nós IMCI somente leitura no console ou remova os índices colunares usando instruções DDL.