O Nascimento do MySQL Hypergraph Optimizer

Nos últimos anos, um termo tem chamado atenção cada vez mais com certa frequência…. a evolução do MySQL Hypergraph Optimizer.

A promessa é um otimizador mais moderno, capaz de avaliar planos mais complexo, especialmente em consultas com múlltiplos JOINs, algo que sempre foi um ponto sensível no MySQL.

Quando pesquisei um pouco sobre, fui direto ao ponto que todo DBA vai naturalmente tentar fazer:

“Legal, como ativar isto?”

E é exatamente aqui que começa a “frustação”, e o motivo deste post.
Neste blog, vou contar de onde vem o Hypergraph Optimizer, o que as documentações sugerem, e principalmente…. Porque na prática em ambiente Produtivos você não consegue ativá-lo via SET, idependente da versão do MySQL.

Antes do Hypergraph: o otimizador clássico do MySQL.

O MySQL sempre utilizou um otimizador baseado em custo, fortemente influenciado por:
  • Cardinalidade estimada.
  • Estatísticas de índices.
  • Ordem de JOINs.
Esse modelo funciona bem para consultas simples ou medianas, mas começa a sofrer quando:
  • O número de tabelas cresce
  • Os JOINs se tornam mais complexos
  • Existem múltiplos caminhos possíveis para o mesmo resultado

O problema central disto é que o plano de busca crescerá exponencial, e o otimizador clássico precisa aplicar heurísticas.

O que é o Hypergraph Optimizer.

O conceito é simples e claro:

  • Cada tabela vira um nó.
  • Cada JOIN vira uma hiper-aresta.
  • O plano de execução passa a ser avaliado como problema grafo, e não mais como uma sequência linear.

Permitindo que o otimizador:

  • Avalie mais combinações válidas de JOIN
  • Compare custos de forma mais global
  • Não dependa tanto da ordem em que o SQL foi escrito

Isto é a teoria, e vemos que representa um salto enorme em capacidade de otimização.
Porém, na prática…. vamos demonstrar.

O mais óbvio: “vamos liga via SET”.

A primeira coisa que fiz foi verificar o estado atual do otimizador:

Como esperado, uma lista com diversas FLAGS relacionadas a otimizações.
O passo seguinte é quase automático para qualquer um que já mexeu com MySQL.

E aqui vem o ponto deste post:
No MySQL 8.0.43, em builds padrão, o Hypergraph Optimizer permanece OFF por padrão e não pode ser efetivamente ativado via SET.

Teste prático (via sysbench).

Para demonstrar que eu não estou tirando conclusões preciptadas, usei minha base de teste (conhecida por muitos):

Sysbench com aproximadamente 1 milhão de registros e indices padrões.

Resultado???

  • Plano simples.
  • Uso de indice esperado.
  • Custo coerente.

E claro, nenhum vínculo relacionado ao Hypergraph, pois não temos como ativá-lo neste ambiente.

Mas então, o Hypergraph não existe?

Essa é uma pergunta muito comum, e a resposta é não.

“O Hypergraph Optimizer existe no código do MySQL, mas não está exposto de forma funcional em builds padrão, como os utilizados em Produção”

Isso explica por que:

  • Não existe uma flag funcional via SET
  • A documentação parece sempre incompleta no uso prático
  • Os testes em ambientes reais não mostram diferenças claras

E isso não é limitação do DBA, nem falta de conhecimento… é uma decisão de implementação.

E o MySQL 9, onde o hypergraph entra nesta história?

Até aqui, todo o contexto do blog foi baseado em MySQL 8.X em builds padrões, exatamente o cenário mais comum em Produção e HML hoje.

Neste contexto, o Hypergraph existe no código, mas não é explorável nem observável via configuração simples.

A partir do MySQL 9, no entanto, esse cenário começa a mudar.
Em versões mais recentes e em ambiente específicos (como MySQL Heatwave), o hypergraph passa a ser ativo de forma experimental, permitindo sim, observar diferenças reais nos planos de execução sem a necessidade de compilar um MySQL em modo DEBUG.

E reforço apenas dois pontos:

  • Isso não muda a realidade de quem está em MySQL 8 em produção.
  • E não transforma o Hypergraph em uma feature “plug and play”.

O que muda é que, a partir do MySQL 9, começamos a ter um caminho intermediário, onde é possível testar o Hypergraph em laboratório, comparar planos e entender melhor seu impacto, ainda de forma controlada

 

Desfecho.

Se você está usando o MySQL 8.0.x em ambientes padrões (PROD) e:

  • Tentou ativiar o via SET.
  • Comparou planos e não viu diferença.
  • Acho que esta “configurando errado”.

O que te digo é:

Você não está fazendo absolutamente nada de errado.

Neste primeiro BLOG sobre o assunto, quis deixar claro apenas:

  • O hypergraph fica OFF por padrão.
  • Ele não pode ser testado via SET.
  • Os teste iniciais só refletem o comportamente do otimizador clássico.
  • Em versões como MySQL 9 ou Heatwave à possibilidade de uso.

No próximo BLOG, vamos sair do escopo das queries simples e entrar onde ele deveria fazer a diferença: Queries com múltiplos JOINs, custo de plano, e porque mesmo nestas condições os resultados são limitados em Produção.

 

Referências:

MySQL Hypergraph Optimizer

Switch Variables – MySQL 8.0 Manual

COMPARTILHE:
Picture of Henrique Borba Garcia

Henrique Borba Garcia

Iniciei meus estudos na área de Desenvolvimento no ano de 2021. Atualmente, em MySQL tenho uma experiência de 5 anos, e com bancos não relacionais (MongoDB) 2 anos. Desempenho o papel de LÍDER TÉCNICO para ambas as técnologias. Sou bastante persistente e proativo em diversos assuntos em banco de dados. Minhas certificações. . MySQL 2025 Solution Enginner Specialist Assessment. . MySQL Database Administrator 8.0 . MySQL Database Developer 8.0 . OCI Foundations 2021, 2022, 2023, e 2024. . MySQL Database Service . MySQL Explorer. . SQL Explorer. . Oracle Cloud Data Management 2023
Picture of Henrique Borba Garcia

Henrique Borba Garcia

Iniciei meus estudos na área de Desenvolvimento no ano de 2021. Atualmente, em MySQL tenho uma experiência de 5 anos, e com bancos não relacionais (MongoDB) 2 anos. Desempenho o papel de LÍDER TÉCNICO para ambas as técnologias. Sou bastante persistente e proativo em diversos assuntos em banco de dados. Minhas certificações. . MySQL 2025 Solution Enginner Specialist Assessment. . MySQL Database Administrator 8.0 . MySQL Database Developer 8.0 . OCI Foundations 2021, 2022, 2023, e 2024. . MySQL Database Service . MySQL Explorer. . SQL Explorer. . Oracle Cloud Data Management 2023

PARTICIPE

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

POSTADO POR
Picture of Henrique Borba Garcia

Henrique Borba Garcia

Iniciei meus estudos na área de Desenvolvimento no ano de 2021. Atualmente, em MySQL tenho uma experiência de 5 anos, e com bancos não relacionais (MongoDB) 2 anos. Desempenho o papel de LÍDER TÉCNICO para ambas as técnologias. Sou bastante persistente e proativo em diversos assuntos em banco de dados. Minhas certificações. . MySQL 2025 Solution Enginner Specialist Assessment. . MySQL Database Administrator 8.0 . MySQL Database Developer 8.0 . OCI Foundations 2021, 2022, 2023, e 2024. . MySQL Database Service . MySQL Explorer. . SQL Explorer. . Oracle Cloud Data Management 2023
PARCEIROS