Guia de Otimização de Desempenho
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:
- Escreva sua consulta no editor
- Clique em "Explain" (⚡) na barra de ferramentas
- 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:
- Abra Preferências → Conexões
- 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:
- Use tunelamento SSH para conexões seguras e otimizadas
- Habilite compressão para grandes conjuntos de resultados
- Agende consultas pesadas durante horas de baixa demanda
- 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ências → Desempenho:
| 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
- Desabilite animações em Preferências → Aparência
- Reduza o atraso de preenchimento automático para 100ms
- Limite a expansão automática da barra lateral
- 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
-
Economizador de Energia (Preferências do Sistema):
- Desabilite "Colocar discos rígidos para dormir"
- Mantenha o display ligado durante consultas longas
-
Monitor de Atividade:
- Monitore o uso de memória do HarborDB
- Verifique os recursos do processo PostgreSQL
-
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ências → Desempenho:
- ✅ "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:
- Exporte para CSV (mais eficiente que JSON)
- Use exportações em chunks (Preferências → Exportação)
- Comprima exportações automaticamente
- Exporte diretamente para armazenamento externo
Monitoramento de Desempenho
Ferramentas Integradas do HarborDB
- Temporizador de Consulta: Mostra o tempo de execução na barra de status
- Monitor de Memória: Visualize em Janela → Monitor de Desempenho
- Status da Conexão: Métricas de rede em tempo real
- 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:
- [ ] Adicione índices apropriados
- [ ] Reescreva a consulta para ser mais eficiente
- [ ] Verifique a configuração do PostgreSQL
- [ ] Verifique a conectividade de rede
- [ ] Aumente as configurações de timeout se necessário
Problema: "HarborDB usa muita memória"
Passos de Solução:
- Reduza o tamanho do cache de consultas (Preferências → Desempenho)
- Feche abas de consulta não utilizadas
- Reinicie o HarborDB periodicamente
- Verifique vazamentos de memória (Monitor de Atividade)
- Aumente a RAM do sistema se consistentemente atingir limites
Problema: "Exportação/Importação muito lenta"
Dicas de Otimização:
- Use formato CSV em vez de JSON
- Desabilite a verificação de antivírus na pasta de destino
- Exporte para SSD em vez de HDD
- Use ferramentas nativas do PostgreSQL (pg_dump/pg_restore) para operações muito grandes
- Divida operações grandes em lotes menores
Problema: "Interface parece lenta"
Correções Rápidas:
- Desabilite realce de sintaxe para consultas muito grandes
- Reduza a expansão automática da barra lateral
- Use tema de UI mais simples
- Feche outros aplicativos intensivos em recursos
- 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:
- Instale PGBouncer (Homebrew:
brew install pgbouncer) - Configure para pool de transações
- Conecte o HarborDB através do PGBouncer
- 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
- Comece com EXPLAIN para novas consultas complexas
- Use LIMIT ao explorar dados
- Feche conexões não utilizadas
- Reinicie o HarborDB regularmente (semanalmente)
- Monitore os recursos do sistema durante trabalho pesado
Manutenção Semanal
- Revise os logs de desempenho de consultas
- Verifique índices não utilizados
- Atualize estatísticas do PostgreSQL (ANALYZE)
- Limpe arquivos temporários
- Faça backup das configurações de desempenho
Revisão Mensal
- Analise padrões de consultas lentas
- Considere particionamento de tabelas para crescimento
- Revise necessidades de hardware
- Atualize HarborDB e PostgreSQL
- Documente melhorias de desempenho
Obtendo Ajuda
Suporte para Ajuste de Desempenho
Se você precisar de ajuda adicional:
- Compartilhe planos de consulta com nossa equipe de suporte
- Exporte logs de desempenho (Preferências → Exportar Logs)
- Inclua especificações do sistema (versão do macOS, RAM, armazenamento)
- 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.