As mentiras dos benchmarks de banco de dados
Aprofundamento CEVIU
Aprofundamento
Os benchmarks de banco de dados costumam ser tratados como vereditos finais, mas a realidade é muito mais sutil. O QuestDB demonstra isso ao reexaminar o ClickBench, um dos testes mais respeitados para bancos analíticos. O problema não está no benchmark em si, mas na forma como as métricas são coletadas e interpretadas. Por exemplo, manter um processo ativo entre execuções pode mudar drasticamente os resultados, não por trapaça, mas porque elimina custos ocultos de inicialização como compilação de consulta, cache de metadados Parquet ou aquecimento do buffer pool. Esses fatores estão dentro da medição de tempo, mesmo que a inicialização do processo esteja fora.
Em um cenário com arquivos Parquet, DuckDB e Polars lideram quando cada consulta roda em um processo novo. Mas ao manter o processo vivo, Hyper dispara de último para terceiro lugar com ganho de 2.17x, algo inesperado, já que sua inicialização estava supostamente excluída da contagem. A lição: processos efêmeros escondem custos reais de warmup mesmo dentro do tempo medido. Já o Polars, que já rodava em sessão persistente, não muda seu desempenho, mas perde posição na pontuação geral porque os concorrentes aceleraram. Isso mostra que uma pontuação relativa pode piorar mesmo com desempenho absoluto inalterado.
Por que isso importa
Para engenheiros de dados e desenvolvedores, esse experimento é um lembrete prático: o desempenho real depende do padrão de uso, não apenas das cifras de um gráfico. Um banco que parece lento em um benchmark com reinícios pode ser rápido em produção, onde conexões persistentes são a norma. Além disso, tecnologias baseadas em JVM, como QuestDB e CrateDB, se beneficiam claramente de mais iterações, seu JIT precisa de tempo para otimizar. Ignorar isso favorece injustamente bancos com compilação estática. A escolha de arquitetura (embedded vs client-server), formato de armazenamento (Parquet externo vs nativo) e até detalhes de configuração (como cache de metadados) impactam diretamente os resultados. Quem toma decisões técnicas precisa questionar o contexto do teste, não só o número final.
Perguntas frequentes
Por que manter o processo ativo muda o resultado do benchmark?
Mesmo que a inicialização do processo não seja medida, operações como compilação de consulta, carregamento de metadados Parquet e aquecimento do buffer pool acontecem dentro da primeira execução. Com um processo novo a cada vez, esses custos são pagos repetidamente. Em uma sessão longeva, eles ocorrem uma vez e depois desaparecem, melhorando o tempo médio das consultas subsequentes.
O que explica a grande melhoria do Hyper com processo persistente?
Apesar de parecer um caso inerte, o Hyper tem custos internos de warmup que só se dissipam com uso contínuo. O tempo de execução medido inclui etapas como preparação do buffer pool e compilação de plano, que são afetadas por um processo fresco. Manter o processo vivo elimina esses custos em chamadas futuras, gerando ganhos reais mesmo sem mudar a consulta ou os dados.
Como bancos baseados em JVM se comportam em benchmarks curtos?
Eles tendem a se sair pior em poucas iterações porque o compilador JIT (Just-In-Time) ainda está otimizando o código quente. Três execuções podem não ser suficientes para atingir o desempenho máximo. Ao aumentar para 10 iterações, QuestDB e CrateDB mostram melhorias claras, refletindo um estado mais próximo do real em ambientes de produção com alta permanência do serviço.
Fontes
- questdb.comfonte original
- Categoria
- CEVIU Web Dev
- Publicado
- 25 de junho de 2026
- Editoria
- CEVIU Web Dev

