Preparação
Conectar ClickHouse e PostgreSQL no DBeaver e criar a baseline.
Laboratório comparativo de consultas OLAP com ClickHouse e PostgreSQL no DBeaver.
Computação 2 · Prof. Afonso Brandão · 24/08/2026
Continuidade · das Aulas 2-6 para a Aula 7
A arquitetura dimensional exige que as consultas respondam dentro do SLA analítico.
Roteiro · 120 minutos
Cada alteração é isolada, medida e interpretada antes da próxima.
Conectar ClickHouse e PostgreSQL no DBeaver e criar a baseline.
MergeTree, PARTITION BY, skip index e materialized view incremental.
Particionamento declarativo, BRIN, B-tree, ANALYZE e VACUUM.
Consolidar evidências e registrar a recomendação técnica.
Método experimental
A interpretação combina tempo, linhas, bytes, buffers e cardinalidade para explicar a variação observada.
Consulta, dados e conexão permanecem constantes. Registra-se a baseline, aplica-se uma alteração estrutural e repete-se a medição. Cada consulta é executada ao menos três vezes e registra-se a mediana.
Execute cada consulta ao menos três vezes e registre a mediana.
Compare resultados antes de comparar desempenho.
Altere apenas uma estrutura por rodada.
Capture o plano de execução junto com o tempo medido.
Distinga redução de leitura de mero efeito de cache.
Bloco 2 · ClickHouse
No ClickHouse, ORDER BY define a ordenação física e, na ausência de outra declaração, também define a chave primária esparsa.
Organiza partes por mês (toYYYYMM). Permite partition pruning e gestão granular de retenção. Não substitui uma chave de ordenação coerente com os filtros frequentes.
Índice esparso que aponta para granules. Mantenha a chave primária como prefixo de ORDER BY. Particionar por identificadores de alta cardinalidade produz excesso de partes.
Bloom filter descarta granules quando a chave principal não atende a predicado seletivo. Teste o predicado antes e depois de materializar o índice.
Desloca agregações da leitura para a ingestão. Exige tabela de destino (SummingMergeTree no laboratório) e backfill explícito para dados históricos.
Bloco 3 · PostgreSQL
BRIN resume faixas físicas; B-tree atende predicados seletivos e ordenados, com maior custo de armazenamento.
PARTITION BY RANGE permite eliminar partições fora do intervalo da consulta. Confirme no plano quantas partições foram acessadas.
Resume faixas físicas e favorece tabelas extensas correlacionadas com a ordem de armazenamento. Aplica-se a intervalos temporais fisicamente ordenados.
(regiao_id, data_venda) INCLUDE (valor) atende filtro combinado de região e tempo. Maior custo de armazenamento e escrita que BRIN.
ANALYZE atualiza estatísticas do planejador. VACUUM recupera espaço reutilizável. Execute ANALYZE após carga inicial e mudanças relevantes de distribuição.
ClickHouse · Passos 1 e 2
Recria o ambiente e estabelece baseline sem ordenação útil para filtros analíticos.
ORDER BY tuple() — sem chave útil para pruning.
PARTITION BY toYYYYMM(data_venda), PRIMARY KEY (regiao_id, data_venda), ORDER BY (regiao_id, data_venda, produto_id).
ClickHouse · Passos 3 e 4
Comparar full scan com partition pruning e avaliar predicado seletivo fora da chave primária.
ClickHouse · Passo 5
A tabela de destino acumula estados parciais; a view processa cada novo bloco inserido na fato.
ClickHouse · Passo 5
O histórico existente é carregado explicitamente; as novas linhas passam a ser processadas pela view.
ClickHouse · Passo 6
Obter duração, linhas, bytes e memória para as consultas recentes do laboratório.
PostgreSQL · Passos 1 e 2
Doze partições mensais para 2025 e dados ordenados temporalmente.
DROP SCHEMA IF EXISTS aula_dw CASCADE; CREATE SCHEMA aula_dw;
PARTITION BY RANGE (data_venda) com 12 partições mensais (2025_01 a 2025_12).
PostgreSQL · Passos 3 e 4
Comparar varredura sequencial, partição eliminada e tipos de índice.
PostgreSQL · Passos 5 e 6
Persistir agregação, refresh concorrente, ANALYZE e VACUUM.
Guia de benchmark
Para cada cenário: execute três vezes, registre mediana, capture plano e confira resultado.
| Mecanismo | Consulta | Estratégia | Tempo mediano | Leitura | Plano | Resultado confere? |
|---|---|---|---|---|---|---|
| ClickHouse | Região + 7 dias | Base / MergeTree otimizada | ms | read_rows e read_bytes | parts e granules | sim/não |
| ClickHouse | Cliente seletivo | Sem / com skip index | ms | granules | Skip | sim/não |
| ClickHouse | Receita diária | Fato / agregada | ms | read_rows | Aggregation | sim/não |
| PostgreSQL | Intervalo de 7 dias | Heap / partições | ms | shared hit/read | Seq Scan / Append | sim/não |
| PostgreSQL | Região + 7 dias | BRIN / B-tree | ms | buffers | Bitmap / Index Scan | sim/não |
| PostgreSQL | Receita diária | Fato / materialized view | ms | buffers | Aggregate / Index Scan | sim/não |
Configuração do DBeaver
Não misture os dialetos: cada roteiro deve permanecer associado à respectiva conexão.
Informe host, porta HTTP 8123 ou HTTPS 8443, database fornecido, usuário e senha. Teste a conexão antes de abrir o editor.
Informe host, porta 5432 ou a porta fornecida, database, usuário e senha. Ative SSL quando o provedor exigir.
Ponte com a Aula 1 · Spec-Driven Development
Quatro artefatos tornam a performance mensurável e reproduzível.
Disponibilizar a receita diária por região para relatórios e painéis analíticos.
Consulta de sete dias atende p95 ≤ 2 s e reduz leitura ≥ 80% em relação à baseline.
ClickHouse: ordenar por região+data, particionar por mês. PostgreSQL: particionar por mês, B-tree em região+data.
Dado o mesmo conjunto de vendas nos dois mecanismos, Quando a consulta otimizada é executada três vezes, Então o resultado é idêntico ao da baseline.
Entregável da aula
O relatório deve sustentar a recomendação com resultados, planos de execução e custos introduzidos.
Inclui as seis linhas do benchmark preenchidas, planos de execução antes e depois, interpretação do gargalo e recomendação técnica para o Data Warehouse do projeto.
Os dois roteiros SQL executados no DBeaver sem misturar conexões ou dialetos.
Registro com ao menos três execuções por cenário apresentando mediana.
Cada comparação inclui plano, métrica de leitura e conferência do resultado.
Recomendação distingue ClickHouse e PostgreSQL e explicita custo introduzido.
Materialização possui estratégia de backfill/refresh e defasagem declarada.
Fechamento
Otimização de Data Warehouses · 24/08/2026 · Prof. Afonso
Ao final do encontro, o estudante deve ser capaz de executar e avaliar técnicas de otimização de consultas OLAP no ClickHouse e no PostgreSQL, registrando evidências obtidas antes e depois de cada alteração.
Laboratório guiado no DBeaver, com o mesmo conjunto sintético de vendas nos dois mecanismos. Cada grupo executa os blocos SQL em ordem, interpreta os planos de execução e registra as diferenças de latência, leitura e cardinalidade.