Guide d'optimisation des performances

Guides
Dernière mise à jour: 16 février 2026

Bienvenue dans le guide d'optimisation des performances de HarborDB. Cette ressource complète vous aidera à optimiser tous les aspects de votre flux de travail PostgreSQL, depuis l'écriture de requêtes efficaces jusqu'à la configuration de HarborDB et macOS pour des performances maximales.

Comprendre les facteurs de performance

Plusieurs facteurs affectent les performances de votre base de données dans HarborDB :

| Facteur | Impact | Niveau d'optimisation | | ---------------------------- | ---------- | --------------------- | | Conception des requêtes | Élevé | Application | | Index de base de données | Élevé | Base de données | | Connexion réseau | Moyen | Infrastructure | | Ressources système | Moyen | macOS | | Paramètres HarborDB | Faible-Moyen | Application | | Configuration PostgreSQL | Élevé | Base de données |

Optimisation des requêtes

Écrire des requêtes efficaces

1. Sélectionnez uniquement ce dont vous avez besoin

-- ❌ Inefficace
SELECT * FROM customers;

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

2. Utilisez les clauses WHERE efficacement

-- ❌ Inefficace (balayage complet de la table)
SELECT * FROM orders
WHERE EXTRACT(YEAR FROM order_date) = 2024;

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

3. Limitez les ensembles de résultats

-- Toujours limiter lors de l'exploration
SELECT * FROM large_table LIMIT 100;

-- Utilisez la pagination pour les grands résultats
SELECT * FROM products
ORDER BY created_at DESC
LIMIT 50 OFFSET 0;

4. Évitez les problèmes de requêtes N+1

-- ❌ Inefficace (requêtes multiples)
-- Première requête : SELECT * FROM orders WHERE status = 'pending'
-- Puis pour chaque commande : SELECT * FROM customers WHERE customer_id = ?

-- ✅ Efficace (requête unique avec JOIN)
SELECT o.*, c.name, c.email
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
WHERE o.status = 'pending';

Utiliser EXPLAIN pour analyser les requêtes

HarborDB facilite l'analyse des performances des requêtes :

  1. Écrivez votre requête dans l'éditeur
  2. Cliquez sur "Expliquer" (⚡) dans la barre d'outils
  3. Examinez le plan d'exécution dans le volet des résultats

Comprendre la sortie EXPLAIN

  • Seq Scan : Balayage complet de la table (souvent lent pour les grandes tables)
  • Index Scan : Utilisation d'un index (généralement plus rapide)
  • Nested Loop : Jointure de tables (vérifiez si approprié)
  • Estimations de coût : Des nombres plus élevés signifient plus de travail

Modèles d'optimisation courants

-- Suggestion d'index manquant
EXPLAIN ANALYZE
SELECT * FROM orders WHERE customer_id = 1234;

-- Le résultat pourrait montrer : "Seq Scan on orders"
-- Solution : CREATE INDEX idx_orders_customer_id ON orders(customer_id);

Optimisation des index de base de données

Quand ajouter des index

Ajoutez des index pour :

  • Clés primaires (indexées automatiquement)
  • Clés étrangères (ont souvent besoin d'indexation manuelle)
  • Colonnes fréquemment filtrées
  • Colonnes fréquemment triées
  • Colonnes utilisées dans les conditions JOIN

Créer des index efficaces

-- Index sur une seule colonne
CREATE INDEX idx_orders_status ON orders(status);

-- Index multi-colonnes (l'ordre est important !)
CREATE INDEX idx_orders_date_status ON orders(order_date, status);

-- Index partiel (pour des sous-ensembles spécifiques)
CREATE INDEX idx_active_users ON users(email) WHERE active = true;

-- Index unique pour contrainte
CREATE UNIQUE INDEX idx_unique_email ON users(email);

Maintenance des index

-- Vérifiez l'utilisation des index
SELECT schemaname, tablename, indexname
FROM pg_stat_user_indexes
WHERE idx_scan = 0;  -- Index jamais utilisés

-- Reconstruisez les index fragmentés
REINDEX INDEX idx_orders_status;

-- Mettez à jour les statistiques pour le planificateur de requêtes
ANALYZE orders;

Optimisation des connexions

Paramètres du pool de connexions

Optimisez vos connexions HarborDB :

  1. Ouvrez PréférencesConnexions
  2. Ajustez les paramètres en fonction de votre flux de travail :

| Paramètre | Valeur recommandée | Objectif | | ------------------------ | ------------------ | --------------------------- | | Délai de connexion | 30 secondes | Empêcher les connexions bloquées | | Keep-Alive | Activé | Maintenir les connexions inactives | | Connexions max | 5-10 | Équilibrer performance/mémoire | | Mode SSL | Prefer | Sécurisé sans surcharge |

Optimisation réseau

Pour les bases de données distantes :

  1. Utilisez le tunneling SSH pour des connexions sécurisées et optimisées
  2. Activez la compression pour les grands ensembles de résultats
  3. Planifiez les requêtes lourdes pendant les heures creuses
  4. Surveillez la latence réseau avec les outils intégrés
-- Testez la latence réseau
SELECT 1 as test;  -- Requête simple pour mesurer le temps aller-retour

Paramètres de performance de HarborDB

Gestion de la mémoire

Ajustez l'utilisation de la mémoire dans PréférencesPerformance :

| Paramètre | Recommandation | Impact | | ----------------------- | -------------- | ----------------------------- | | Cache des requêtes | 256 Mo | Requêtes répétées plus rapides | | Mémoire des résultats | 512 Mo | Gérer les jeux de données plus grands | | Mode streaming | Activé | Meilleur pour les grands résultats | | Auto-rafraîchissement | 30 secondes | Équilibrer fraîcheur/performance |

Optimisation de l'interface

  1. Désactivez les animations dans Préférences → Apparence
  2. Réduisez le délai d'auto-complétion à 100 ms
  3. Limitez la profondeur d'auto-expansion de la barre latérale
  4. Utilisez le mode sombre pour l'efficacité de l'affichage OLED

Raccourcis clavier pour la vitesse

Maîtrisez ces accélérateurs de productivité :

| Raccourci | Action | Temps gagné | | -------- | -------------- | -------------- | | ⌘ + R | Exécuter la requête | 2-3 secondes | | ⌘ + . | Annuler la requête | Évite les attentes | | ⌘ + T | Nouvel onglet de requête | 1-2 secondes | | ⌘ + S | Sauvegarder la requête | 1 seconde | | ⌘ + E | Exporter les résultats | 2 secondes | | ⌘ + F | Rechercher dans la requête | 3-5 secondes |

Optimisation du système macOS

Considérations matérielles

Mémoire (RAM)

  • Minimum : 8 Go pour une utilisation basique
  • Recommandé : 16 Go pour un travail professionnel
  • Optimal : 32 Go pour les grands jeux de données

Stockage (SSD)

  • Minimum : 256 Go d'espace libre
  • Recommandé : 512 Go+ pour les fichiers de base de données et les exportations
  • Utilisez un SSD externe pour le stockage de grandes bases de données

Processeur

  • Apple Silicon : M1/M2/M3 optimisés
  • Intel : i5 minimum, i7/i9 recommandé

Paramètres macOS

  1. Économiseur d'énergie (Préférences Système) :

    • Désactivez "Mettre les disques durs en veille"
    • Gardez l'écran allumé pendant les longues requêtes
  2. Moniteur d'activité :

    • Surveillez l'utilisation de la mémoire de HarborDB
    • Vérifiez les ressources du processus PostgreSQL
  3. Utilitaire de disque :

    • Assurez-vous que TRIM SSD est activé
    • Surveillez la santé du disque et l'espace libre

Commandes de performance Terminal

# Vérifiez les ressources système
top -o cpu  # Utilisation CPU
vm_stat     # Utilisation mémoire
iostat      # I/O disque

# Surveillez HarborDB spécifiquement
ps aux | grep HarborDB
lsof -p $(pgrep HarborDB) | wc -l  # Fichiers ouverts

Stratégies pour les grands jeux de données

Travailler avec des millions de lignes

1. Pagination côté serveur

-- Au lieu de charger toutes les lignes
SELECT * FROM huge_table;

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

-- Page suivante
SELECT * FROM huge_table
ORDER BY id
LIMIT 1000 OFFSET 1000;

2. Diffusion des résultats

Activez dans PréférencesPerformance :

  • ✅ "Activer la diffusion pour les résultats > 10 000 lignes"
  • ✅ "Taille des morceaux de diffusion : 1 000 lignes"
  • ✅ "Diffusion en arrière-plan : Activée"

3. Vues matérialisées

-- Pré-calculez les requêtes coûteuses
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);

-- Rafraîchissez périodiquement
REFRESH MATERIALIZED VIEW daily_sales_summary;

Optimisation des exportations

Pour les grandes exportations :

  1. Exportez vers CSV (plus efficace que JSON)
  2. Utilisez des exportations par morceaux (Préférences → Exportation)
  3. Compressez les exportations automatiquement
  4. Exportez directement vers un stockage externe

Surveillance des performances

Outils intégrés de HarborDB

  1. Minuteur de requête : Affiche le temps d'exécution dans la barre d'état
  2. Moniteur de mémoire : Affichez dans Fenêtre → Moniteur de performance
  3. État de connexion : Métriques réseau en temps réel
  4. Historique des requêtes : Examinez les performances des requêtes passées

Requêtes de surveillance PostgreSQL

-- Requêtes actives
SELECT
    pid,
    usename,
    query_start,
    state,
    query
FROM pg_stat_activity
WHERE state != 'idle'
ORDER BY query_start DESC;

-- Requêtes lentes
SELECT
    query,
    calls,
    total_time,
    mean_time,
    rows
FROM pg_stat_statements
ORDER BY mean_time DESC
LIMIT 10;

-- Statistiques des tables
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;

Problèmes de performance courants et solutions

Problème : "La requête prend trop de temps"

Liste de vérification des solutions :

  1. [ ] Ajoutez des index appropriés
  2. [ ] Réécrivez la requête pour qu'elle soit plus efficace
  3. [ ] Vérifiez la configuration PostgreSQL
  4. [ ] Vérifiez la connectivité réseau
  5. [ ] Augmentez les paramètres de délai d'attente si nécessaire

Problème : "HarborDB utilise trop de mémoire"

Étapes de solution :

  1. Réduisez la taille du cache des requêtes (Préférences → Performance)
  2. Fermez les onglets de requête inutilisés
  3. Redémarrez HarborDB périodiquement
  4. Recherchez les fuites de mémoire (Moniteur d'activité)
  5. Augmentez la RAM système si vous atteignez régulièrement les limites

Problème : "Exportation/Importation très lente"

Conseils d'optimisation :

  1. Utilisez le format CSV au lieu de JSON
  2. Désactivez l'analyse antivirus sur le dossier cible
  3. Exportez vers SSD au lieu de HDD
  4. Utilisez les outils natifs PostgreSQL (pg_dump/pg_restore) pour les opérations très volumineuses
  5. Divisez les grandes opérations en lots plus petits

Problème : "L'interface semble lente"

Corrections rapides :

  1. Désactivez la coloration syntaxique pour les très grandes requêtes
  2. Réduisez l'auto-expansion de la barre latérale
  3. Utilisez un thème d'interface plus simple
  4. Fermez les autres applications gourmandes en ressources
  5. Redémarrez HarborDB et macOS

Techniques d'optimisation avancées

Partitionnement des grandes tables

-- Créez une table partitionnée
CREATE TABLE orders_partitioned (
    order_id BIGSERIAL,
    order_date DATE NOT NULL,
    customer_id INT,
    total DECIMAL(10,2)
) PARTITION BY RANGE (order_date);

-- Créez des 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');

Indications de plan de requête

-- Forcez l'utilisation d'un index (à utiliser avec prudence)
SET enable_seqscan = off;

-- Augmentez temporairement la mémoire de travail
SET work_mem = '64MB';

-- Utilisez une méthode de jointure spécifique
SET enable_nestloop = off;
SET enable_hashjoin = on;

Mise en commun des connexions avec PGBouncer

Pour les applications à haute concurrence :

  1. Installez PGBouncer (Homebrew : brew install pgbouncer)
  2. Configurez pour la mise en commun des transactions
  3. Connectez HarborDB via PGBouncer
  4. Surveillez les statistiques de réutilisation des connexions

Tests de performance

Création de requêtes de référence

-- Testez les performances des requêtes
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;

-- Comparez avec différentes approches
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;

Surveillance dans le temps

Créez une table de journalisation des performances :

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

-- Journalisez les requêtes lentes
INSERT INTO query_performance_log
    (query_hash, execution_time_ms, row_count, notes)
SELECT
    md5(query),
    EXTRACT(MILLISECONDS FROM NOW() - query_start),
    result_rows,
    'Requête lente détectée'
FROM pg_stat_activity
WHERE state = 'active'
  AND NOW() - query_start > INTERVAL '5 seconds';

Résumé des meilleures pratiques

Flux de travail quotidien

  1. Commencez avec EXPLAIN pour les nouvelles requêtes complexes
  2. Utilisez LIMIT lors de l'exploration des données
  3. Fermez les connexions inutilisées
  4. Redémarrez régulièrement HarborDB (hebdomadairement)
  5. Surveillez les ressources système pendant un travail intensif

Maintenance hebdomadaire

  1. Examinez les journaux de performance des requêtes
  2. Recherchez les index inutilisés
  3. Mettez à jour les statistiques PostgreSQL (ANALYZE)
  4. Nettoyez les fichiers temporaires
  5. Sauvegardez les configurations de performance

Revue mensuelle

  1. Analysez les modèles de requêtes lentes
  2. Envisagez le partitionnement des tables pour la croissance
  3. Revoyez les besoins matériels
  4. Mettez à jour HarborDB et PostgreSQL
  5. Documentez les améliorations de performance

Obtenir de l'aide

Support pour le réglage des performances

Si vous avez besoin d'aide supplémentaire :

  1. Partagez les plans d'exécution avec notre équipe de support
  2. Exportez les journaux de performance (Préférences → Exporter les journaux)
  3. Incluez les spécifications système (version macOS, RAM, stockage)
  4. Décrivez votre flux de travail et les tailles typiques de jeux de données

Ressources supplémentaires

Cela vous a-t-il été utile ?

Aidez-nous à améliorer cette documentation en fournissant des commentaires.