Voltar
QuestDB 10.1 traz dados mais atualizados, menos I/O e mais recursos de análise em SQL

QuestDB 10.1 reduz reescrita de dados atrasados e ganha percentis exatos em SQL

Aprofundamento CEVIU

Aprofundamento

O QuestDB mantém cada partição ordenada por tempo. Por isso, um commit com linhas atrasadas para uma partição já gravada sempre exigiu escrever uma cópia nova dela, com as linhas tardias mescladas. Poucos milhares de linhas atrasadas podem custar a reescrita de milhões. Com cairo.o3.partition.merge.append.enabled=true, o commit pega só a fatia da partição afetada, mescla as linhas atrasadas nela e anexa o resultado ao fim dos arquivos de coluna. A partição passa a apontar para a nova cópia da fatia, e as linhas substituídas ficam como espaço morto até uma compactação em segundo plano juntar tudo de novo.

Na demo pública, com o recurso ativo desde 22 de outubro, a escrita caiu de cerca de 440 para cerca de 8 linhas em disco por linha ingerida, em boa parte por causa do refresh de materialized views. A mediana de aplicação de um lote WAL foi de 1,7 ms para 0,6 ms. O custo é espaço em disco temporário. O recurso vem desligado por padrão, e versões anteriores à 10.1 recusam uma tabela que ainda tenha partições merge-append, então o rollback pede preparo. A compactação roda a cada dois minutos em tabelas WAL, sem pausar a ingestão, e novas colunas (deadRows, pieceCount, lastWriteTimestamp) aparecem em table_partitions() e SHOW PARTITIONS.

A release também traz percentile_disc() e percentile_cont() exatos, com vários níveis numa passada e suporte a valores negativos, ao contrário de approx_percentile(). A cláusula SUBSAMPLE seleciona linhas reais do resultado, e a tabela sys.metrics grava cerca de 160 métricas por segundo, com TTL de uma semana. Há ainda GROUP BY paralelo sobre joins e mudanças em HORIZON JOIN que podem alterar resultados existentes. O texto da fonte avisa que esta versão tem mais breaking changes que o normal.

Por que isso importa

Para quem opera QuestDB com vários produtores ou reconexões que reenviam dados, o ganho está em I/O de disco e em latência até a linha ficar legível. Em troca, é preciso monitorar espaço e planejar o rollback antes de ligar a flag. Quem usa HORIZON JOIN ou aritmética com INT deve ler a lista de breaking changes antes de atualizar. O sys.metrics ajuda a ver a amplificação de escrita antes e depois, mas é histórico de uma instância só; para frotas, Prometheus ou Telegraf continuam fazendo sentido.

Perguntas frequentes

O que são partições merge-append no QuestDB 10.1?

São partições em que uma escrita atrasada não reescreve tudo. O QuestDB mescla as linhas tardias na fatia afetada e anexa o resultado aos arquivos de coluna. Uma compactação em segundo plano depois junta as peças e recupera as linhas obsoletas.

Como ativar o merge-append e quais os riscos?

Basta definir cairo.o3.partition.merge.append.enabled=true. Vem desligado por padrão. Entre a escrita atrasada e a compactação a partição ocupa mais disco que suas linhas vivas, e versões anteriores à 10.1 recusam tabelas com essas partições, então o downgrade exige preparo.

Qual a diferença entre percentile_disc, percentile_cont e approx_percentile?

percentile_disc() devolve um valor que existe nos dados e percentile_cont() interpola entre os dois mais próximos. Ambos aceitam negativos e vários níveis numa passada. approx_percentile() usa menos memória, mas não aceita valores negativos.

O que é a tabela sys.metrics?

É uma tabela onde o QuestDB grava cerca de 160 contadores e gauges a cada segundo, particionada por dia com TTL de uma semana. Dá para consultá-la por SQL e montar dashboards em notebooks do Web Console. Ela não aparece em tables(), então é preciso consultar pelo nome.

Fontes

Avalie este artigo:
Categoria
CEVIU DevOps
Publicado
26 de outubro de 2026
Editoria
CEVIU DevOps

Quer receber mais sobre CEVIU DevOps?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser