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.
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:
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.
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.
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.
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.
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.
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.
Na página Basic Information, localize o campo Automatic IMCI-based Query Acceleration e clique em Enable.
-
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.
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.
Na página Basic Information, localize o campo Automatic IMCI-based Query Acceleration e clique em Close.
Na caixa de diálogo Disable Automatic IMCI-based Query Acceleration, clique em OK para desativar o recurso.
Para verificar a versão do seu cluster, consulte Consultar a versão do mecanismo.
Observações de uso
Ativar o AutoIndex
Desativar o AutoIndex
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.