Leistungsoptimierungsleitfaden
Willkommen zum HarborDB-Leistungsoptimierungsleitfaden. Diese umfassende Ressource hilft Ihnen, jeden Aspekt Ihres PostgreSQL-Arbeitsablaufs zu optimieren, vom Schreiben effizienter Abfragen bis zur Konfiguration von HarborDB und macOS für maximale Leistung.
Leistungsfaktoren verstehen
Mehrere Faktoren beeinflussen die Leistung Ihrer Datenbank in HarborDB:
| Faktor | Auswirkung | Optimierungsebene | | ---------------------------- | ---------- | -------------------- | | Abfragedesign | Hoch | Anwendung | | Datenbankindizes | Hoch | Datenbank | | Netzwerkverbindung | Mittel | Infrastruktur | | Systemressourcen | Mittel | macOS | | HarborDB-Einstellungen | Niedrig-Mittel | Anwendung | | PostgreSQL-Konfiguration | Hoch | Datenbank |
Abfrageoptimierung
Effiziente Abfragen schreiben
1. Nur das auswählen, was Sie benötigen
-- ❌ Ineffizient
SELECT * FROM customers;
-- ✅ Effizient
SELECT customer_id, name, email FROM customers;
2. WHERE-Klauseln effektiv verwenden
-- ❌ Ineffizient (vollständiger Tabellenscan)
SELECT * FROM orders
WHERE EXTRACT(YEAR FROM order_date) = 2024;
-- ✅ Effizient (verwendet Index)
SELECT * FROM orders
WHERE order_date >= '2024-01-01'
AND order_date < '2025-01-01';
3. Ergebnismengen begrenzen
-- Immer begrenzen beim Erkunden
SELECT * FROM large_table LIMIT 100;
-- Paginierung für große Ergebnisse verwenden
SELECT * FROM products
ORDER BY created_at DESC
LIMIT 50 OFFSET 0;
4. N+1-Abfrageprobleme vermeiden
-- ❌ Ineffizient (mehrere Abfragen)
-- Erste Abfrage: SELECT * FROM orders WHERE status = 'pending'
-- Dann für jede Bestellung: SELECT * FROM customers WHERE customer_id = ?
-- ✅ Effizient (einzelne Abfrage mit JOIN)
SELECT o.*, c.name, c.email
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
WHERE o.status = 'pending';
EXPLAIN zur Abfrageanalyse verwenden
HarborDB macht die Abfrageleistungsanalyse einfach:
- Schreiben Sie Ihre Abfrage im Editor
- Klicken Sie auf "Erklären" (⚡) in der Symbolleiste
- Überprüfen Sie den Ausführungsplan im Ergebnisbereich
EXPLAIN-Ausgabe verstehen
- Seq Scan: Vollständiger Tabellenscan (oft langsam für große Tabellen)
- Index Scan: Index verwenden (normalerweise schneller)
- Nested Loop: Tabellen verknüpfen (prüfen, ob angemessen)
- Kostenschätzungen: Höhere Zahlen bedeuten mehr Arbeit
Häufige Optimierungsmuster
-- Fehlenden Index vorschlagen
EXPLAIN ANALYZE
SELECT * FROM orders WHERE customer_id = 1234;
-- Ergebnis könnte zeigen: "Seq Scan on orders"
-- Lösung: CREATE INDEX idx_orders_customer_id ON orders(customer_id);
Datenbank-Index-Optimierung
Wann Indizes hinzufügen
Fügen Sie Indizes hinzu für:
- Primärschlüssel (automatisch indiziert)
- Fremdschlüssel (oft manuelle Indizierung benötigt)
- Häufig gefilterte Spalten
- Häufig sortierte Spalten
- In JOIN-Bedingungen verwendete Spalten
Effektive Indizes erstellen
-- Einspaltiger Index
CREATE INDEX idx_orders_status ON orders(status);
-- Mehrspaltiger Index (Reihenfolge wichtig!)
CREATE INDEX idx_orders_date_status ON orders(order_date, status);
-- Partieller Index (für bestimmte Teilmengen)
CREATE INDEX idx_active_users ON users(email) WHERE active = true;
-- Eindeutiger Index für Constraint
CREATE UNIQUE INDEX idx_unique_email ON users(email);
Index-Wartung
-- Indexnutzung überprüfen
SELECT schemaname, tablename, indexname
FROM pg_stat_user_indexes
WHERE idx_scan = 0; -- Never used indexes
-- Fragmentierte Indizes neu aufbauen
REINDEX INDEX idx_orders_status;
-- Statistiken für Query-Planner aktualisieren
ANALYZE orders;
Verbindungsoptimierung
Verbindungspool-Einstellungen
Optimieren Sie Ihre HarborDB-Verbindungen:
- Öffnen Sie Einstellungen → Verbindungen
- Passen Sie Einstellungen basierend auf Ihrem Arbeitsablauf an:
| Einstellung | Empfohlener Wert | Zweck | | -------------------------- | ---------------- | ------------------------------ | | Verbindungstimeout | 30 Sekunden | Hängende Verbindungen verhindern | | Keep-Alive | Aktiviert | Inaktive Verbindungen erhalten | | Maximale Verbindungen | 5-10 | Leistung/Speicher ausbalancieren | | SSL-Modus | Bevorzugen | Sicher ohne Overhead |
Netzwerkoptimierung
Für Remote-Datenbanken:
- Verwenden Sie SSH-Tunneling für sichere, optimierte Verbindungen
- Aktivieren Sie Komprimierung für große Ergebnismengen
- Planen Sie aufwändige Abfragen außerhalb der Hauptzeiten
- Überwachen Sie Netzwerklatenz mit integrierten Tools
-- Netzwerklatenz testen
SELECT 1 as test; -- Einfache Abfrage zur Messung der Round-Trip-Zeit
HarborDB-Leistungseinstellungen
Speicherverwaltung
Passen Sie die Speichernutzung in Einstellungen → Leistung an:
| Einstellung | Empfehlung | Auswirkung | | ---------------------- | -------------- | ----------------------------- | | Abfrage-Cache | 256 MB | Schnellere wiederholte Abfragen | | Ergebnismengen-Speicher | 512 MB | Größere Datensätze verarbeiten | | Streaming-Modus | Aktiviert | Besser für große Ergebnisse | | Auto-Aktualisierung | 30 Sekunden | Aktualität/Leistung ausbalancieren |
Interface-Optimierung
- Deaktivieren Sie Animationen in Einstellungen → Darstellung
- Reduzieren Sie die Auto-Vervollständigungsverzögerung auf 100ms
- Begrenzen Sie die automatische Seitenleisten-Erweiterungstiefe
- Verwenden Sie den Dunkelmodus für OLED-Display-Effizienz
Tastenkürzel für Geschwindigkeit
Beherrschen Sie diese Produktivitäts-Booster:
| Tastenkürzel | Aktion | Zeitersparnis |
| ------------ | -------------------- | ------------------- |
| ⌘ + R | Abfrage ausführen | 2-3 Sekunden |
| ⌘ + . | Abfrage abbrechen | Verhindert Wartezeiten |
| ⌘ + T | Neuer Abfrage-Tab | 1-2 Sekunden |
| ⌘ + S | Abfrage speichern | 1 Sekunde |
| ⌘ + E | Ergebnisse exportieren | 2 Sekunden |
| ⌘ + F | In Abfrage suchen | 3-5 Sekunden |
macOS-Systemoptimierung
Hardware-Überlegungen
Arbeitsspeicher (RAM)
- Mindestens: 8 GB für grundlegende Nutzung
- Empfohlen: 16 GB für professionelle Arbeit
- Optimal: 32 GB für große Datensätze
Speicher (SSD)
- Mindestens: 256 GB freier Speicherplatz
- Empfohlen: 512 GB+ für Datenbankdateien und Exporte
- Externe SSD verwenden für große Datenbankspeicherung
Prozessor
- Apple Silicon: M1/M2/M3 optimiert
- Intel: i5 mindestens, i7/i9 empfohlen
macOS-Einstellungen
-
Energiesparmodus (Systemeinstellungen):
- Deaktivieren Sie "Festplatten in Ruhezustand versetzen"
- Display während langer Abfragen eingeschaltet lassen
-
Aktivitätsanzeige:
- Überwachen Sie die HarborDB-Speichernutzung
- Überprüfen Sie PostgreSQL-Prozessressourcen
-
Festplatten-Dienstprogramm:
- Stellen Sie sicher, dass SSD TRIM aktiviert ist
- Überwachen Sie die Festplattengesundheit und freien Speicherplatz
Terminal-Leistungsbefehle
# Systemressourcen überprüfen
top -o cpu # CPU-Nutzung
vm_stat # Speichernutzung
iostat # Disk-I/O
# HarborDB spezifisch überwachen
ps aux | grep HarborDB
lsof -p $(pgrep HarborDB) | wc -l # Geöffnete Dateien
Strategien für große Datensätze
Arbeiten mit Millionen von Zeilen
1. Serverseitige Paginierung
-- 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. Streaming-Ergebnisse
Aktivieren in Einstellungen → Leistung:
- ✅ "Streaming für Ergebnisse > 10.000 Zeilen aktivieren"
- ✅ "Streaming-Chunk-Größe: 1000 Zeilen"
- ✅ "Hintergrund-Streaming: Aktiviert"
3. Materialisierte Ansichten
-- 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;
Exportoptimierung
Für große Exporte:
- Exportieren Sie nach CSV (effizienter als JSON)
- Verwenden Sie Chunk-Exporte (Einstellungen → Export)
- Komprimieren Sie Exporte automatisch
- Exportieren Sie direkt auf externen Speicher
Leistungsüberwachung
Integrierte HarborDB-Tools
- Abfrage-Timer: Zeigt Ausführungszeit in der Statusleiste
- Speichermonitor: Anzeige unter Fenster → Leistungsmonitor
- Verbindungsstatus: Echtzeit-Netzwerkmetriken
- Abfrageverlauf: Vergangene Abfrageleistung überprüfen
PostgreSQL-Überwachungsabfragen
-- Aktive Abfragen
SELECT
pid,
usename,
query_start,
state,
query
FROM pg_stat_activity
WHERE state != 'idle'
ORDER BY query_start DESC;
-- Langsame Abfragen
SELECT
query,
calls,
total_time,
mean_time,
rows
FROM pg_stat_statements
ORDER BY mean_time DESC
LIMIT 10;
-- Tabellenstatistiken
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;
Häufige Leistungsprobleme & Lösungen
Problem: "Abfrage dauert zu lange"
Lösungscheckliste:
- [ ] Passende Indizes hinzufügen
- [ ] Abfrage effizienter umschreiben
- [ ] PostgreSQL-Konfiguration überprüfen
- [ ] Netzwerkverbindung überprüfen
- [ ] Timeout-Einstellungen bei Bedarf erhöhen
Problem: "HarborDB verwendet zu viel Speicher"
Lösungsschritte:
- Abfrage-Cache-Größe reduzieren (Einstellungen → Leistung)
- Unbenutzte Abfrage-Tabs schließen
- HarborDB regelmäßig neu starten
- Auf Speicherlecks prüfen (Aktivitätsanzeige)
- System-RAM erhöhen, wenn regelmäßig Limits erreicht werden
Problem: "Export/Import sehr langsam"
Optimierungstipps:
- CSV-Format anstelle von JSON verwenden
- Antiviren-Scanning im Zielordner deaktivieren
- Auf SSD statt HDD exportieren
- PostgreSQL-Nativ-Tools (pg_dump/pg_restore) für sehr große Operationen verwenden
- Große Operationen in kleinere Batches aufteilen
Problem: "Interface fühlt sich träge an"
Schnelllösungen:
- Syntaxhervorhebung für sehr große Abfragen deaktivieren
- Automatische Seitenleisten-Erweiterung reduzieren
- Einfacheres UI-Theme verwenden
- Andere ressourcenintensive Anwendungen schließen
- HarborDB und macOS neu starten
Erweiterte Optimierungstechniken
Partitionierung großer Tabellen
-- Partitionierte Tabelle erstellen
CREATE TABLE orders_partitioned (
order_id BIGSERIAL,
order_date DATE NOT NULL,
customer_id INT,
total DECIMAL(10,2)
) PARTITION BY RANGE (order_date);
-- Partitionen erstellen
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');
Query-Plan-Hinweise
-- Indexnutzung erzwingen (vorsichtig verwenden)
SET enable_seqscan = off;
-- Arbeitspeicher vorübergehend erhöhen
SET work_mem = '64MB';
-- Spezifische Join-Methode verwenden
SET enable_nestloop = off;
SET enable_hashjoin = on;
Verbindungspooling mit PGBouncer
Für Anwendungen mit hoher Parallelität:
- Installieren Sie PGBouncer (Homebrew:
brew install pgbouncer) - Konfigurieren Sie für Transaktions-Pooling
- Verbinden Sie HarborDB über PGBouncer
- Überwachen Sie Verbindungswiederverwendungsstatistiken
Leistungstests
Benchmark-Abfragen erstellen
-- Abfrageleistung testen
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;
-- Mit verschiedenen Ansätzen vergleichen
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;
Überwachung über Zeit
Erstellen Sie eine Leistungsprotokolltabelle:
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
);
-- Langsame Abfragen protokollieren
INSERT INTO query_performance_log
(query_hash, execution_time_ms, row_count, notes)
SELECT
md5(query),
EXTRACT(MILLISECONDS FROM NOW() - query_start),
result_rows,
'Langsame Abfrage erkannt'
FROM pg_stat_activity
WHERE state = 'active'
AND NOW() - query_start > INTERVAL '5 seconds';
Best Practices Zusammenfassung
Täglicher Arbeitsablauf
- Beginnen Sie mit EXPLAIN für neue komplexe Abfragen
- Verwenden Sie LIMIT beim Erkunden von Daten
- Schließen Sie ungenutzte Verbindungen
- Starte HarborDB regelmäßig neu (wöchentlich)
- Überwachen Sie Systemressourcen während intensiver Arbeit
Wöchentliche Wartung
- Überprüfen Sie Abfrageleistungsprotokolle
- Prüfen Sie auf ungenutzte Indizes
- Aktualisieren Sie PostgreSQL-Statistiken (ANALYZE)
- Bereinigen Sie temporäre Dateien
- Sichern Sie Leistungskonfigurationen
Monatliche Überprüfung
- Analysieren Sie langsame Abfragemuster
- Erwägen Sie Tabellenpartitionierung für Wachstum
- Überprüfen Sie Hardware-Anforderungen
- Aktualisieren Sie HarborDB und PostgreSQL
- Dokumentieren Sie Leistungsverbesserungen
Hilfe erhalten
Leistungsoptimierungs-Support
Wenn Sie zusätzliche Hilfe benötigen:
- Teilen Sie Abfragepläne mit unserem Support-Team
- Exportieren Sie Leistungsprotokolle (Einstellungen → Protokolle exportieren)
- Fügen Sie Systemangaben hinzu (macOS-Version, RAM, Speicher)
- Beschreiben Sie Ihren Arbeitsablauf und typische Datensatzgrößen
Zusätzliche Ressourcen
War das hilfreich?
Helfen Sie uns, diese Dokumentation zu verbessern, indem Sie Feedback geben.