Guía de Optimización de Rendimiento

Guides
Última actualización: 16 de febrero de 2026

Bienvenido a la guía de optimización de rendimiento de HarborDB. Este recurso integral le ayudará a optimizar cada aspecto de su flujo de trabajo con PostgreSQL, desde escribir consultas eficientes hasta configurar HarborDB y macOS para el máximo rendimiento.

Comprendiendo los Factores de Rendimiento

Varios factores afectan el rendimiento de su base de datos en HarborDB:

| Factor | Impacto | Nivel de Optimización | | ---------------------------- | ---------- | --------------------- | | Diseño de Consultas | Alto | Aplicación | | Índices de Base de Datos | Alto | Base de Datos | | Conexión de Red | Medio | Infraestructura | | Recursos del Sistema | Medio | macOS | | Configuración de HarborDB| Bajo-Medio | Aplicación | | Configuración de PostgreSQL | Alto | Base de Datos |

Optimización de Consultas

Escribiendo Consultas Eficientes

1. Seleccione Solo lo que Necesita

-- ❌ Ineficiente
SELECT * FROM customers;

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

2. Use Cláusulas WHERE Efectivamente

-- ❌ Ineficiente (escaneo completo de tabla)
SELECT * FROM orders
WHERE EXTRACT(YEAR FROM order_date) = 2024;

-- ✅ Eficiente (usa índice)
SELECT * FROM orders
WHERE order_date >= '2024-01-01'
  AND order_date < '2025-01-01';

3. Limite Conjuntos de Resultados

-- Siempre limite cuando explore
SELECT * FROM large_table LIMIT 100;

-- Use paginación para resultados grandes
SELECT * FROM products
ORDER BY created_at DESC
LIMIT 50 OFFSET 0;

4. Evite Problemas de Consultas N+1

-- ❌ Ineficiente (múltiples consultas)
-- Primera consulta: SELECT * FROM orders WHERE status = 'pending'
-- Luego para cada orden: SELECT * FROM customers WHERE customer_id = ?

-- ✅ Eficiente (consulta única con 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 Analizar Consultas

HarborDB facilita el análisis del rendimiento de consultas:

  1. Escriba su consulta en el editor
  2. Haga clic en "Explicar" (⚡) en la barra de herramientas
  3. Revise el plan de ejecución en el panel de resultados

Comprendiendo la Salida de EXPLAIN

  • Secuencia de Escaneo: Escaneo completo de tabla (a menudo lento para tablas grandes)
  • Escaneo de Índice: Usando un índice (usualmente más rápido)
  • Bucle Anidado: Uniendo tablas (verifique si es apropiado)
  • Estimaciones de Costo: Números más altos significan más trabajo

Patrones Comunes de Optimización

-- Sugerencia de índice faltante
EXPLAIN ANALYZE
SELECT * FROM orders WHERE customer_id = 1234;

-- El resultado podría mostrar: "Secuencia de Escaneo en orders"
-- Solución: CREATE INDEX idx_orders_customer_id ON orders(customer_id);

Optimización de Índices de Base de Datos

Cuándo Agregar Índices

Agregue índices para:

  • Claves primarias (indexadas automáticamente)
  • Claves externas (a menudo necesitan indexación manual)
  • Columnas filtradas frecuentemente
  • Columnas ordenadas frecuentemente
  • Columnas usadas en condiciones JOIN

Creando Índices Efectivos

-- Índice de columna única
CREATE INDEX idx_orders_status ON orders(status);

-- Índice multi-columna (¡el orden importa!)
CREATE INDEX idx_orders_date_status ON orders(order_date, status);

-- Índice parcial (para subconjuntos específicos)
CREATE INDEX idx_active_users ON users(email) WHERE active = true;

-- Índice único para restricción
CREATE UNIQUE INDEX idx_unique_email ON users(email);

Mantenimiento de Índices

-- Verifique uso de índices
SELECT schemaname, tablename, indexname
FROM pg_stat_user_indexes
WHERE idx_scan = 0;  -- Índices nunca usados

-- Reconstruya índices fragmentados
REINDEX INDEX idx_orders_status;

-- Actualice estadísticas para el planificador de consultas
ANALYZE orders;

Optimización de Conexión

Configuración de Pool de Conexiones

Optimice sus conexiones de HarborDB:

  1. Abra PreferenciasConexiones
  2. Ajuste configuraciones basado en su flujo de trabajo:

| Configuración | Valor Recomendado | Propósito | | ----------------------- | ----------------- | ----------------------------- | | Tiempo de Espera de Conexión | 30 segundos | Prevenir conexiones colgadas | | Keep-Alive | Habilitado | Mantener conexiones inactivas | | Conexiones Máximas | 5-10 | Balancear rendimiento/memoria | | Modo SSL | Preferir | Seguro sin sobrecarga |

Optimización de Red

Para bases de datos remotas:

  1. Use túnel SSH para conexiones seguras y optimizadas
  2. Habilite compresión para conjuntos de resultados grandes
  3. Programe consultas pesadas durante horas de menor actividad
  4. Monitoree latencia de red con herramientas incorporadas
-- Pruebe latencia de red
SELECT 1 as test;  -- Consulta simple para medir tiempo de ida y vuelta

Configuración de Rendimiento de HarborDB

Gestión de Memoria

Ajuste el uso de memoria en PreferenciasRendimiento:

| Configuración | Recomendación | Impacto | | ---------------------- | ------------- | ------------------------------ | | Caché de Consultas | 256 MB | Consultas repetidas más rápidas | | Memoria de Conjunto de Resultados | 512 MB | Manejar conjuntos de datos más grandes | | Modo de Transmisión | Habilitado | Mejor para resultados grandes | | Auto-Actualizar | 30 segundos | Balancear frescura/rendimiento |

Optimización de Interfaz

  1. Deshabilite animaciones en Preferencias → Apariencia
  2. Reduzca retraso de autocompletado a 100ms
  3. Limite profundidad de auto-expansión de barra lateral
  4. Use modo oscuro para eficiencia de pantalla OLED

Atajos de Teclado para Velocidad

Domine estos potenciadores de productividad:

| Atajo | Acción | Tiempo Ahorrado | | ------- | -------------- | --------------- | | ⌘ + R | Ejecutar consulta | 2-3 segundos | | ⌘ + . | Cancelar consulta | Previene esperas | | ⌘ + T | Nueva pestaña de consulta | 1-2 segundos | | ⌘ + S | Guardar consulta | 1 segundo | | ⌘ + E | Exportar resultados | 2 segundos | | ⌘ + F | Buscar en consulta | 3-5 segundos |

Optimización del Sistema macOS

Consideraciones de Hardware

Memoria (RAM)

  • Mínimo: 8 GB para uso básico
  • Recomendado: 16 GB para trabajo profesional
  • Óptimo: 32 GB para conjuntos de datos grandes

Almacenamiento (SSD)

  • Mínimo: 256 GB de espacio libre
  • Recomendado: 512 GB+ para archivos de base de datos y exportaciones
  • Use SSD externo para almacenamiento de base de datos grande

Procesador

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

Configuraciones de macOS

  1. Ahorro de Energía (Preferencias del Sistema):

    • Deshabilite "Poner discos duros a dormir"
    • Mantenga pantalla encendida durante consultas largas
  2. Monitor de Actividad:

    • Monitoree uso de memoria de HarborDB
    • Verifique recursos de proceso PostgreSQL
  3. Utilidad de Disco:

    • Asegúrese de que TRIM de SSD esté habilitado
    • Monitoree salud de disco y espacio libre

Comandos de Rendimiento en Terminal

# Verifique recursos del sistema
top -o cpu  # Uso de CPU
vm_stat     # Uso de memoria
iostat      # E/S de disco

# Monitoree HarborDB específicamente
ps aux | grep HarborDB
lsof -p $(pgrep HarborDB) | wc -l  # Archivos abiertos

Estrategias para Conjuntos de Datos Grandes

Trabajando con Millones de Filas

1. Paginación del Lado del Servidor

-- En lugar de cargar todas las filas
SELECT * FROM huge_table;

-- Use paginación
SELECT * FROM huge_table
ORDER BY id
LIMIT 1000 OFFSET 0;

-- Siguiente página
SELECT * FROM huge_table
ORDER BY id
LIMIT 1000 OFFSET 1000;

2. Transmisión de Resultados

Habilite en PreferenciasRendimiento:

  • ✅ "Habilitar transmisión para resultados > 10,000 filas"
  • ✅ "Tamaño de fragmento de transmisión: 1000 filas"
  • ✅ "Transmisión en segundo plano: Habilitado"

3. Vistas Materializadas

-- Pre-calcule consultas costosas
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);

-- Actualice periódicamente
REFRESH MATERIALIZED VIEW daily_sales_summary;

Optimización de Exportación

Para exportaciones grandes:

  1. Exporte a CSV (más eficiente que JSON)
  2. Use exportaciones fragmentadas (Preferencias → Exportar)
  3. Comprima exportaciones automáticamente
  4. Exporte directamente a almacenamiento externo

Monitoreo de Rendimiento

Herramientas Incorporadas de HarborDB

  1. Temporizador de Consulta: Muestra tiempo de ejecución en barra de estado
  2. Monitor de Memoria: Vea en Ventana → Monitor de Rendimiento
  3. Estado de Conexión: Métricas de red en tiempo real
  4. Historial de Consultas: Revise rendimiento de consultas pasadas

Consultas de Monitoreo de PostgreSQL

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

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

-- Estadísticas de tabla
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 Comunes de Rendimiento y Soluciones

Problema: "La consulta toma demasiado tiempo"

Lista de Verificación de Solución:

  1. [ ] Agregue índices apropiados
  2. [ ] Reescriba consulta para ser más eficiente
  3. [ ] Verifique configuración de PostgreSQL
  4. [ ] Confirme conectividad de red
  5. [ ] Aumente configuraciones de tiempo de espera si es necesario

Problema: "HarborDB usa demasiada memoria"

Pasos de Solución:

  1. Reduzca tamaño de caché de consultas (Preferencias → Rendimiento)
  2. Cierre pestañas de consulta no utilizadas
  3. Reinicie HarborDB periódicamente
  4. Verifique fugas de memoria (Monitor de Actividad)
  5. Aumente RAM del sistema si consistentemente alcanza límites

Problema: "Exportación/Importación muy lenta"

Consejos de Optimización:

  1. Use formato CSV en lugar de JSON
  2. Deshabilite escaneo de antivirus en carpeta objetivo
  3. Exporte a SSD en lugar de HDD
  4. Use herramientas nativas de PostgreSQL (pg_dump/pg_restore) para operaciones muy grandes
  5. Divida operaciones grandes en lotes más pequeños

Problema: "La interfaz se siente lenta"

Soluciones Rápidas:

  1. Deshabilite resaltado de sintaxis para consultas muy grandes
  2. Reduzca auto-expansión de barra lateral
  3. Use tema de interfaz más simple
  4. Cierre otras aplicaciones intensivas en recursos
  5. Reinicie HarborDB y macOS

Técnicas Avanzadas de Optimización

Particionamiento de Tablas Grandes

-- Cree tabla particionada
CREATE TABLE orders_partitioned (
    order_id BIGSERIAL,
    order_date DATE NOT NULL,
    customer_id INT,
    total DECIMAL(10,2)
) PARTITION BY RANGE (order_date);

-- Cree particiones
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');

Sugerencias de Plan de Consulta

-- Fuerce uso de índice (use con precaución)
SET enable_seqscan = off;

-- Aumente temporalmente memoria de trabajo
SET work_mem = '64MB';

-- Use método de unión específico
SET enable_nestloop = off;
SET enable_hashjoin = on;

Pool de Conexiones con PGBouncer

Para aplicaciones de alta concurrencia:

  1. Instale PGBouncer (Homebrew: brew install pgbouncer)
  2. Configure para pool de transacciones
  3. Conecte HarborDB a través de PGBouncer
  4. Monitoree estadísticas de reutilización de conexiones

Pruebas de Rendimiento

Creando Consultas de Referencia

-- Pruebe rendimiento de consulta
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 con diferentes enfoques
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;

Monitoreo a lo Largo del Tiempo

Cree una tabla de registro de rendimiento:

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
);

-- Registre consultas lentas
INSERT INTO query_performance_log
    (query_hash, execution_time_ms, row_count, notes)
SELECT
    md5(query),
    EXTRACT(MILLISECONDS FROM NOW() - query_start),
    result_rows,
    'Consulta lenta detectada'
FROM pg_stat_activity
WHERE state = 'active'
  AND NOW() - query_start > INTERVAL '5 seconds';

Resumen de Mejores Prácticas

Flujo de Trabajo Diario

  1. Comience con EXPLAIN para nuevas consultas complejas
  2. Use LIMIT cuando explore datos
  3. Cierre conexiones no utilizadas
  4. Reinicie HarborDB regularmente (semanalmente)
  5. Monitoree recursos del sistema durante trabajo pesado

Mantenimiento Semanal

  1. Revise registros de rendimiento de consultas
  2. Verifique índices no utilizados
  3. Actualice estadísticas de PostgreSQL (ANALYZE)
  4. Limpie archivos temporales
  5. Respaldue configuraciones de rendimiento

Revisión Mensual

  1. Analice patrones de consultas lentas
  2. Considere particionamiento de tablas para crecimiento
  3. Revise necesidades de hardware
  4. Actualice HarborDB y PostgreSQL
  5. Documente mejoras de rendimiento

Obteniendo Ayuda

Soporte de Ajuste de Rendimiento

Si necesita ayuda adicional:

  1. Comparta planes de consulta con nuestro equipo de soporte
  2. Exporte registros de rendimiento (Preferencias → Exportar Registros)
  3. Incluya especificaciones del sistema (versión de macOS, RAM, almacenamiento)
  4. Describa su flujo de trabajo y tamaños típicos de conjunto de datos

Recursos Adicionales

¿Te resultó útil?

Ayúdanos a mejorar esta documentación proporcionando comentarios.