Guia de Otimização de Desempenho

Guides
Última atualização: 16 de fevereiro de 2026

Bem-vindo ao guia de otimização de desempenho do HarborDB. Este recurso abrangente ajudará você a otimizar todos os aspectos do seu fluxo de trabalho PostgreSQL, desde a escrita de consultas eficientes até a configuração do HarborDB e macOS para desempenho máximo.

Compreendendo os Fatores de Desempenho

Vários fatores afetam o desempenho do seu banco de dados no HarborDB:

| Fator | Impacto | Nível de Otimização | | ---------------------------- | --------- | ------------------- | | Design de Consulta | Alto | Aplicação | | Índices do Banco de Dados | Alto | Banco de Dados | | Conexão de Rede | Médio | Infraestrutura | | Recursos do Sistema | Médio | macOS | | Configurações do HarborDB | Baixo-Médio | Aplicação | | Configuração do PostgreSQL | Alto | Banco de Dados |

Otimização de Consultas

Escrevendo Consultas Eficientes

1. Selecione Apenas o que Você Precisa

-- ❌ Inefficient
SELECT * FROM customers;

-- ✅ Efficient
SELECT customer_id, name, email FROM customers;

2. Use Cláusulas WHERE Efetivamente

-- ❌ Inefficient (full table scan)
SELECT * FROM orders
WHERE EXTRACT(YEAR FROM order_date) = 2024;

-- ✅ Efficient (uses index)
SELECT * FROM orders
WHERE order_date >= '2024-01-01'
  AND order_date < '2025-01-01';

3. Limite os Conjuntos de Resultados

-- Always limit when exploring
SELECT * FROM large_table LIMIT 100;

-- Use pagination for large results
SELECT * FROM products
ORDER BY created_at DESC
LIMIT 50 OFFSET 0;

4. Evite Problemas N+1 de Consultas

-- ❌ Inefficient (multiple queries)
-- First query: SELECT * FROM orders WHERE status = 'pending'
-- Then for each order: SELECT * FROM customers WHERE customer_id = ?

-- ✅ Efficient (single query with JOIN)
SELECT o.*, c.name, c.email
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
WHERE o.status = 'pending';

Usando EXPLAIN para Analisar Consultas

O HarborDB facilita a análise do desempenho das consultas:

  1. Escreva sua consulta no editor
  2. Clique em "Explain" (⚡) na barra de ferramentas
  3. Revise o plano de execução no painel de resultados

Compreendendo a Saída do EXPLAIN

  • Seq Scan: Varredura completa da tabela (frequentemente lenta para tabelas grandes)
  • Index Scan: Usando um índice (geralmente mais rápido)
  • Nested Loop: Juntando tabelas (verifique se é apropriado)
  • Estimativas de custo: Números mais altos significam mais trabalho

Padrões Comuns de Otimização

-- Add missing index suggestion
EXPLAIN ANALYZE
SELECT * FROM orders WHERE customer_id = 1234;

-- Result might show: "Seq Scan on orders"
-- Solution: CREATE INDEX idx_orders_customer_id ON orders(customer_id);

Otimização de Índices do Banco de Dados

Quando Adicionar Índices

Adicione índices para:

  • Chaves primárias (indexadas automaticamente)
  • Chaves estrangeiras (frequentemente precisam de indexação manual)
  • Colunas filtradas frequentemente
  • Colunas ordenadas frequentemente
  • Colunas usadas em condições JOIN

Criando Índices Efetivos

-- Single column index
CREATE INDEX idx_orders_status ON orders(status);

-- Multi-column index (order matters!)
CREATE INDEX idx_orders_date_status ON orders(order_date, status);

-- Partial index (for specific subsets)
CREATE INDEX idx_active_users ON users(email) WHERE active = true;

-- Unique index for constraint
CREATE UNIQUE INDEX idx_unique_email ON users(email);

Manutenção de Índices

-- Check index usage
SELECT schemaname, tablename, indexname
FROM pg_stat_user_indexes
WHERE idx_scan = 0;  -- Never used indexes

-- Rebuild fragmented indexes
REINDEX INDEX idx_orders_status;

-- Update statistics for query planner
ANALYZE orders;

Otimização de Conexão

Configurações de Pool de Conexão

Otimize suas conexões do HarborDB:

  1. Abra PreferênciasConexões
  2. Ajuste as configurações com base no seu fluxo de trabalho:

| Configuração | Valor Recomendado | Propósito | | -------------------------- | ----------------- | ------------------------------ | | Timeout de Conexão | 30 segundos | Evitar conexões penduradas | | Keep-Alive | Habilitado | Manter conexões ociosas | | Máximo de Conexões | 5-10 | Equilibrar desempenho/memória | | Modo SSL | Preferir | Seguro sem sobrecarga |

Otimização de Rede

Para bancos de dados remotos:

  1. Use tunelamento SSH para conexões seguras e otimizadas
  2. Habilite compressão para grandes conjuntos de resultados
  3. Agende consultas pesadas durante horas de baixa demanda
  4. Monitore a latência de rede com ferramentas integradas
-- Test network latency
SELECT 1 as test;  -- Simple query to measure round-trip time

Configurações de Desempenho do HarborDB

Gerenciamento de Memória

Ajuste o uso de memória em PreferênciasDesempenho:

| Configuração | Recomendação | Impacto | | -------------------------- | ------------ | -------------------------------- | | Cache de Consultas | 256 MB | Consultas repetidas mais rápidas | | Memória do Conjunto de Resultados | 512 MB | Lidar com conjuntos de dados maiores | | Modo de Streaming | Habilitado | Melhor para grandes resultados | | Atualização Automática | 30 segundos | Equilibrar atualização/desempenho |

Otimização de Interface

  1. Desabilite animações em Preferências → Aparência
  2. Reduza o atraso de preenchimento automático para 100ms
  3. Limite a expansão automática da barra lateral
  4. Use o modo escuro para eficiência de display OLED

Atalhos de Teclado para Velocidade

Domine estes impulsionadores de produtividade:

| Atalho | Ação | Tempo Economizado | | ------ | -------------- | ----------------- | | ⌘ + R| Executar consulta | 2-3 segundos | | ⌘ + .| Cancelar consulta | Evita esperas | | ⌘ + T| Nova aba de consulta | 1-2 segundos | | ⌘ + S| Salvar consulta | 1 segundo | | ⌘ + E| Exportar resultados | 2 segundos | | ⌘ + F| Encontrar na consulta | 3-5 segundos |

Otimização do Sistema macOS

Considerações de Hardware

Memória (RAM)

  • Mínimo: 8 GB para uso básico
  • Recomendado: 16 GB para trabalho profissional
  • Ótimo: 32 GB para grandes conjuntos de dados

Armazenamento (SSD)

  • Mínimo: 256 GB de espaço livre
  • Recomendado: 512 GB+ para arquivos de banco de dados e exportações
  • Use SSD externo para armazenamento de banco de dados grande

Processador

  • Apple Silicon: M1/M2/M3 otimizado
  • Intel: i5 mínimo, i7/i9 recomendado

Configurações do macOS

  1. Economizador de Energia (Preferências do Sistema):

    • Desabilite "Colocar discos rígidos para dormir"
    • Mantenha o display ligado durante consultas longas
  2. Monitor de Atividade:

    • Monitore o uso de memória do HarborDB
    • Verifique os recursos do processo PostgreSQL
  3. Utilitário de Disco:

    • Certifique-se de que o SSD TRIM está habilitado
    • Monitore a saúde do disco e espaço livre

Comandos de Desempenho no Terminal

# Check system resources
top -o cpu  # CPU usage
vm_stat     # Memory usage
iostat      # Disk I/O

# Monitor HarborDB specifically
ps aux | grep HarborDB
lsof -p $(pgrep HarborDB) | wc -l  # Open files

Estratégias para Grandes Conjuntos de Dados

Trabalhando com Milhões de Linhas

1. Paginação no Servidor

-- Instead of loading all rows
SELECT * FROM huge_table;

-- Use pagination
SELECT * FROM huge_table
ORDER BY id
LIMIT 1000 OFFSET 0;

-- Next page
SELECT * FROM huge_table
ORDER BY id
LIMIT 1000 OFFSET 1000;

2. Resultados em Streaming

Habilite em PreferênciasDesempenho:

  • ✅ "Habilitar streaming para resultados > 10.000 linhas"
  • ✅ "Tamanho do chunk de streaming: 1000 linhas"
  • ✅ "Streaming em segundo plano: Habilitado"

3. Visualizações Materializadas

-- Pre-compute expensive queries
CREATE MATERIALIZED VIEW daily_sales_summary AS
SELECT
    DATE(order_date) as day,
    COUNT(*) as orders,
    SUM(total) as revenue
FROM orders
GROUP BY DATE(order_date);

-- Refresh periodically
REFRESH MATERIALIZED VIEW daily_sales_summary;

Otimização de Exportação

Para grandes exportações:

  1. Exporte para CSV (mais eficiente que JSON)
  2. Use exportações em chunks (Preferências → Exportação)
  3. Comprima exportações automaticamente
  4. Exporte diretamente para armazenamento externo

Monitoramento de Desempenho

Ferramentas Integradas do HarborDB

  1. Temporizador de Consulta: Mostra o tempo de execução na barra de status
  2. Monitor de Memória: Visualize em Janela → Monitor de Desempenho
  3. Status da Conexão: Métricas de rede em tempo real
  4. Histórico de Consultas: Revise o desempenho de consultas anteriores

Consultas de Monitoramento PostgreSQL

-- Active queries
SELECT
    pid,
    usename,
    query_start,
    state,
    query
FROM pg_stat_activity
WHERE state != 'idle'
ORDER BY query_start DESC;

-- Slow queries
SELECT
    query,
    calls,
    total_time,
    mean_time,
    rows
FROM pg_stat_statements
ORDER BY mean_time DESC
LIMIT 10;

-- Table statistics
SELECT
    schemaname,
    relname,
    seq_scan,
    idx_scan,
    n_tup_ins,
    n_tup_upd,
    n_tup_del
FROM pg_stat_user_tables
ORDER BY seq_scan DESC;

Problemas Comuns de Desempenho & Soluções

Problema: "Consulta leva muito tempo"

Lista de Verificação de Solução:

  1. [ ] Adicione índices apropriados
  2. [ ] Reescreva a consulta para ser mais eficiente
  3. [ ] Verifique a configuração do PostgreSQL
  4. [ ] Verifique a conectividade de rede
  5. [ ] Aumente as configurações de timeout se necessário

Problema: "HarborDB usa muita memória"

Passos de Solução:

  1. Reduza o tamanho do cache de consultas (Preferências → Desempenho)
  2. Feche abas de consulta não utilizadas
  3. Reinicie o HarborDB periodicamente
  4. Verifique vazamentos de memória (Monitor de Atividade)
  5. Aumente a RAM do sistema se consistentemente atingir limites

Problema: "Exportação/Importação muito lenta"

Dicas de Otimização:

  1. Use formato CSV em vez de JSON
  2. Desabilite a verificação de antivírus na pasta de destino
  3. Exporte para SSD em vez de HDD
  4. Use ferramentas nativas do PostgreSQL (pg_dump/pg_restore) para operações muito grandes
  5. Divida operações grandes em lotes menores

Problema: "Interface parece lenta"

Correções Rápidas:

  1. Desabilite realce de sintaxe para consultas muito grandes
  2. Reduza a expansão automática da barra lateral
  3. Use tema de UI mais simples
  4. Feche outros aplicativos intensivos em recursos
  5. Reinicie o HarborDB e macOS

Técnicas Avançadas de Otimização

Particionamento de Tabelas Grandes

-- Create partitioned table
CREATE TABLE orders_partitioned (
    order_id BIGSERIAL,
    order_date DATE NOT NULL,
    customer_id INT,
    total DECIMAL(10,2)
) PARTITION BY RANGE (order_date);

-- Create partitions
CREATE TABLE orders_2024_q1 PARTITION OF orders_partitioned
    FOR VALUES FROM ('2024-01-01') TO ('2024-04-01');

CREATE TABLE orders_2024_q2 PARTITION OF orders_partitioned
    FOR VALUES FROM ('2024-04-01') TO ('2024-07-01');

Dicas de Plano de Consulta

-- Force index usage (use cautiously)
SET enable_seqscan = off;

-- Temporarily increase work memory
SET work_mem = '64MB';

-- Use specific join method
SET enable_nestloop = off;
SET enable_hashjoin = on;

Pool de Conexão com PGBouncer

Para aplicações de alta concorrência:

  1. Instale PGBouncer (Homebrew: brew install pgbouncer)
  2. Configure para pool de transações
  3. Conecte o HarborDB através do PGBouncer
  4. Monitore estatísticas de reutilização de conexão

Testes de Desempenho

Criando Consultas de Benchmark

-- Test query performance
EXPLAIN ANALYZE
SELECT * FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31'
  AND status = 'completed'
ORDER BY total DESC
LIMIT 100;

-- Compare with different approaches
EXPLAIN ANALYZE
SELECT * FROM orders
WHERE status = 'completed'
  AND order_date >= '2024-01-01'
  AND order_date <= '2024-12-31'
ORDER BY total DESC
LIMIT 100;

Monitoramento ao Longo do Tempo

Crie uma tabela de log de desempenho:

CREATE TABLE query_performance_log (
    log_id SERIAL PRIMARY KEY,
    query_hash TEXT,
    execution_time_ms INTEGER,
    row_count INTEGER,
    timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    notes TEXT
);

-- Log slow queries
INSERT INTO query_performance_log
    (query_hash, execution_time_ms, row_count, notes)
SELECT
    md5(query),
    EXTRACT(MILLISECONDS FROM NOW() - query_start),
    result_rows,
    'Slow query detected'
FROM pg_stat_activity
WHERE state = 'active'
  AND NOW() - query_start > INTERVAL '5 seconds';

Resumo das Melhores Práticas

Fluxo de Trabalho Diário

  1. Comece com EXPLAIN para novas consultas complexas
  2. Use LIMIT ao explorar dados
  3. Feche conexões não utilizadas
  4. Reinicie o HarborDB regularmente (semanalmente)
  5. Monitore os recursos do sistema durante trabalho pesado

Manutenção Semanal

  1. Revise os logs de desempenho de consultas
  2. Verifique índices não utilizados
  3. Atualize estatísticas do PostgreSQL (ANALYZE)
  4. Limpe arquivos temporários
  5. Faça backup das configurações de desempenho

Revisão Mensal

  1. Analise padrões de consultas lentas
  2. Considere particionamento de tabelas para crescimento
  3. Revise necessidades de hardware
  4. Atualize HarborDB e PostgreSQL
  5. Documente melhorias de desempenho

Obtendo Ajuda

Suporte para Ajuste de Desempenho

Se você precisar de ajuda adicional:

  1. Compartilhe planos de consulta com nossa equipe de suporte
  2. Exporte logs de desempenho (Preferências → Exportar Logs)
  3. Inclua especificações do sistema (versão do macOS, RAM, armazenamento)
  4. Descreva seu fluxo de trabalho e tamanhos típicos de conjuntos de dados

Recursos Adicionais

Isso foi útil?

Ajude-nos a melhorar esta documentação fornecendo feedback.