Inhaltsverzeichnis

  1. Einführung

  2. Die Datenbankstruktur von Dolibarr verstehen

  3. Warum Datenbankoptimierung wichtig ist

  4. Wichtige Leistungsengpässe in Dolibarr-Installationen

  5. Optimierung auf Serverebene

  6. MySQL/MariaDB-Konfigurationsoptimierung

  7. Dolibarr-spezifische Tabellenoptimierungen

  8. Indizes sinnvoll verwenden

  9. Archivierung und Bereinigung von Daten

  10. Abfrageoptimierung in benutzerdefinierten Modulen

  11. Überwachung und Profilerstellung der Datenbankleistung

  12. Cron-Jobs und Hintergrundprozessoptimierung

  13. Best Practices für die langfristige Datenbankgesundheit

  14. Häufige Fehler und wie man sie vermeidet

  15. Fazit

  16. Werkzeuge und Ressourcen


1. Einleitung

Dolibarr ERP & CRM ist eine weit verbreitete Open-Source-Softwareplattform zur Verwaltung der Geschäftsprozesse kleiner und mittlerer Unternehmen. Sie ist modular, webbasiert und basiert auf einem LAMP- oder LEMP-Stack, hauptsächlich unter Verwendung von PHP und MySQL oder MariaDB.

Obwohl Dolibarr für seine Benutzerfreundlichkeit und Flexibilität gelobt wird, kann seine Leistung mit der Zeit nachlassen – insbesondere bei zunehmendem Datenvolumen. Datenbankoptimierung ist eine der effektivsten Möglichkeiten, die Reaktionsfähigkeit und Zuverlässigkeit von Dolibarr-Installationen aufrechtzuerhalten oder zu verbessern.

In diesem Handbuch erfahren Sie, wie Sie die Dolibarr-Datenbank für eine bessere Leistung optimieren können. Dabei geht es um alles, von der Optimierung auf Serverebene bis hin zu SQL-Indizierungsstrategien. Egal, ob Sie Systemadministrator, Entwickler oder Geschäftsinhaber sind und Ihre eigene Dolibarr-Instanz verwalten – diese Strategien helfen Ihnen, sicherzustellen, dass Ihr ERP-System schnell und effizient bleibt.


2. Die Datenbankstruktur von Dolibarr verstehen

Dolibarr verwendet eine relationales Datenbankmodell basiert auf MySQL oder MariaDB. Die gesamte Geschäftslogik – wie Kunden, Rechnungen, Produkte, Benutzer, Bestellungen und Lagerbestände – wird in relationalen Tabellen gespeichert. llx_ Präfix standardmäßig (dies kann während der Installation geändert werden).

Hauptmerkmale der Datenbankstruktur von Dolibarr:

  • Flaches Schema pro Modul: Jedes Modul (z. B. Rechnung, Bestellung, Produkt) verfügt über eigene Tabellen.

  • Einzelentitätsmodell (außer bei Verwendung von MultiCompany): Alle Daten gehören einer Organisation.

  • ORM-ähnliche Objektabstraktion: Dolibarr verwendet CommonObject Klassen zur Handhabung von Datenbankinteraktionen mit PHP.

  • Kein ORM von Drittanbietern: Der Datenbankzugriff ist integriert und verwendet direkt SQL mit Hilfsfunktionen.

Aufgrund ihrer modularen Struktur kann die Datenbank von Dolibarr mit der Zeit groß und komplex werden. Deshalb regelmäßige Wartung und intelligente Optimierungsstrategien sind lebenswichtig.


3. Warum Datenbankoptimierung wichtig ist

Eine schlechte Datenbankleistung kann sich auf viele Arten äußern:

  • Langsames Laden von Listenansichten und Berichten

  • Timeouts bei der Rechnungserstellung

  • Übermäßige Speicher- und CPU-Auslastung

  • Latenz beim Importieren/Exportieren großer Datensätze

  • Anwendungsabstürze oder -blockaden bei starker Beanspruchung

Die Optimierung der Datenbank ist aus folgenden Gründen von entscheidender Bedeutung:

  • Dolibarr ist datenintensiv: Rechnungen, Bestellungen, Produkte, Lagerbestände, Benutzer und Protokolle sammeln alle Daten.

  • Interaktion in Echtzeit: Jede Benutzerinteraktion (z. B. das Anklicken eines Kunden oder das Speichern einer Rechnung) löst Datenbankabfragen aus.

  • E/A-gebundene Operationen: Berichte, Exporte und Analysen lesen große Datenmengen von der Festplatte und aus dem RAM.

  • Einschränkungen beim Shared Hosting: Viele Dolibarr-Benutzer setzen in Umgebungen mit geringen Ressourcen ein, in denen die Feinabstimmung von entscheidender Bedeutung ist.

Optimierung verbessert Geschwindigkeit, Skalierbarkeit, Stabilität und langfristige Wartbarkeit Ihres ERP-Systems.


4. Wichtige Leistungsengpässe in Dolibarr-Installationen

Hier sind häufige Ursachen für Leistungsprobleme im Zusammenhang mit der Datenbankebene:

  • Schlecht konfigurierte MySQL- oder MariaDB-Servereinstellungen

  • Fehlende Indizes für häufig genutzte Spalten

  • Riesige nicht archivierte Tabellen (z. B. Protokolle, Rechnungen, Ereignisse)

  • Ineffiziente SQL-Abfragen in benutzerdefinierten Modulen

  • Übermäßiger Einsatz von Verknüpfungen oder Unterabfragen

  • Missbrauch von Cron-Jobs, die jede Minute in die Datenbank schreiben

  • Kein Caching für häufig abgerufene Daten

Die systematische Behandlung dieser Probleme führt zu messbaren Leistungsverbesserungen.


5. Optimierung auf Serverebene

Bevor Sie Dolibarr selbst optimieren, stellen Sie sicher, dass Ihre Server-Infrastruktur für Ihre Arbeitsbelastung geeignet ist.

5.1 SSD-Speicher verwenden

Die Lese-/Schreibgeschwindigkeit der Datenbank hängt stark vom Festplatten-E/A ab. Steigen Sie von HDD auf SSD um, um die Leistung deutlich zu steigern.

5.2 Ausreichend RAM zuweisen

  • Mindestens: 2 GB

  • Empfohlen: 4–8 GB für die Produktion mit mehreren Benutzern

RAM ist besonders wichtig für MySQL innodb_buffer_pool.

5.3 CPU-Ressourcen optimieren

Obwohl Dolibarr nicht extrem CPU-gebunden ist, können mehrere Kerne insbesondere bei gleichzeitigen Benutzern hilfreich sein.

5.4 Dolibarr auf einem VPS oder einer Cloud-Instanz ausführen

Vermeiden Sie Shared Hosting, wenn Sie große Datenmengen verarbeiten oder eine benutzerdefinierte MySQL-Optimierung benötigen.

Empfohlene Anbieter: DigitalOcean, Hetzner, Linode, AWS Lightsail.


6. MySQL/MariaDB-Konfigurationsoptimierung

Die Optimierung Ihrer MySQL-Konfiguration kann enorme Auswirkungen haben.

Bearbeiten Sie Ihre MySQL-Konfigurationsdatei (z. B. /etc/mysql/my.cnf) und stimmen Sie Folgendes ab:

6.1 Wichtige Parameter

ini

innodb_buffer_pool_size = 1G # ~60-70% of available RAM query_cache_size = 0 # Deprecated, disable tmp_table_size = 64M max_allowed_packet = 64M innodb_log_file_size = 256M innodb_flush_log_at_trx_commit = 2 max_connections = 100

Verwenden Sie Werkzeuge wie MySQLTuner um Einstellungen dynamisch zu analysieren und zu optimieren.

6.2 Aktivieren der Protokollierung langsamer Abfragen

Aktivieren Sie die Protokollierung, um zu langsame Abfragen zu identifizieren:

ini

slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2

Auf diese Weise können Sie Engpässe für die weitere Abfrageoptimierung identifizieren.


7. Dolibarr-spezifische Tabellenoptimierungen

7.1 Fokus auf große Tabellen

Zu den üblichen großen Tabellen gehören:

  • llx_facture – Rechnungen

  • llx_commande - Aufträge

  • llx_adherent – Mitglieder

  • llx_actioncomm - Veranstaltungen

  • llx_user kombiniert mit einem nachhaltigen Materialprofil. llx_userlog – Login-Daten

  • llx_product_stock - Inventar

Nutzen Sie ANALYZE TABLE kombiniert mit einem nachhaltigen Materialprofil. SHOW TABLE STATUS um Größe und Indexnutzung zu überprüfen.

7.2-Verwendung OPTIMIZE TABLE

Führen Sie diesen Befehl regelmäßig für Tabellen mit hohem Schreibaufkommen aus:

SQL

OPTIMIZE TABLE llx_facture, llx_actioncomm;

Dadurch wird Speicherplatz zurückgewonnen und die Zugriffsgeschwindigkeit verbessert.


8. Indizes sinnvoll verwenden

Indizes beschleunigen das Lesen, verlangsamen aber das Schreiben. Nutzen Sie sie strategisch.

8.1 Indizes zu häufig abgefragten Feldern hinzufügen

Beispiele:

SQL

ALTER TABLE llx_facture ADD INDEX idx_ref (ref); ALTER TABLE llx_commande ADD INDEX idx_fk_soc (fk_soc);

8.2 Redundante Indizes vermeiden

Suchen Sie mit: nach überlappenden oder doppelten Indizes.

SQL

SHOW INDEXES FROM llx_facture;

Entfernen Sie nicht verwendete Indizes, die die Leistung nicht verbessern.

 

9. Archivierung und Bereinigung von Daten

Mit der Zeit kann Ihre Dolibarr-Datenbank durch historische Datensätze wie alte Rechnungen, Angebote, E-Mails, Protokolle und Lagerbewegungen überlastet werden. Diese Anhäufung beeinträchtigt die Abfrageleistung und verlängert die Sicherungszeiten.

9.1 Warum Archivierung wichtig ist

  • Verbessert die SELECT-Leistung bei operativen Tabellen

  • Reduziert die Größe der Indizes

  • Beschleunigt Backups und Datenexporte

  • Hilft, die Einhaltung der Richtlinien zur Datenaufbewahrung sicherzustellen

9.2 Was kann archiviert werden?

  • Alte Rechnungen (llx_facture)

  • Inaktive Dritte (llx_societe)

  • Ereignisse, die älter als 12–24 Monate sind (llx_actioncomm)

  • Benutzerprotokolle und Prüfpfade (llx_userlog)

  • E-Mail-Nachrichtenverlauf (llx_mail)

9.3 Archivierungsstrategien

  • Verschieben Sie ältere Daten nach Archivtabellen (z.B, llx_facture_archive)

  • Verwenden Sie Skripte, um alte Datensätze nach CSV exportieren und aus der Datenbank löschen

  • Richten Sie ein cron-Job monatlich oder vierteljährlich laufen

  • Verwenden Sie Module oder benutzerdefinierte Seiten, um die selektive Archivierung auszulösen

Beispiel-SQL zum Archivieren von Rechnungen, die älter als 2 Jahre sind:

SQL

INSERT INTO llx_facture_archive SELECT * FROM llx_facture WHERE datef < DATE_SUB(NOW(), INTERVAL 2 YEAR); DELETE FROM llx_facture WHERE datef < DATE_SUB(NOW(), INTERVAL 2 YEAR);

⚠️ Testen Sie immer zuerst auf einer Staging-Datenbank und stellen Sie sicher, dass vor dem Massenlöschen Sicherungen vorhanden sind.


10. Abfrageoptimierung in benutzerdefinierten Modulen

Viele Leistungsprobleme sind auf schlecht geschriebenes SQL in benutzerdefinierten Modulen oder Berichten zurückzuführen.

10.1 Vorbereitete Anweisungen verwenden

Vermeiden Sie das Erstellen von SQL-Abfragen mit Rohdaten des Benutzers. Verwenden Sie Dolibarrs $db->query() kombiniert mit einem nachhaltigen Materialprofil. $db->escape() Funktionen.

schlecht:

php

$sql = "SELECT * FROM llx_product WHERE ref = '".$_POST['ref']."'";

Besser:

php

$ref = $db->escape(GETPOST('ref')); $sql = "SELECT * FROM llx_product WHERE ref = '".$ref."'";

10.2 Nutzungsbeschränkungen und Seitennummerierung

Geben Sie niemals Tausende von Zeilen in einer Abfrage zurück.

SQL

SELECT * FROM llx_product ORDER BY ref LIMIT 0, 50;

Nutzen Sie LIMIT kombiniert mit einem nachhaltigen Materialprofil. OFFSET zur Seitennummerierung.

10.3 Vermeiden Sie N+1-Abfragen

Anstatt eine Abfrage pro Element in einer Schleife aufzurufen, verwenden Sie JOIN or IN() Bedingungen zum Batchabrufen von Daten.

schlecht:

php

foreach ($products as $p) { $sql = "SELECT * FROM llx_stock WHERE fk_product = ".$p->id; }

Besser:

php

$sql = "SELECT * FROM llx_stock WHERE fk_product IN (".implode(',', $product_ids).")";

11. Überwachung und Profilerstellung der Datenbankleistung

11.1 Verwenden Sie die integrierten Tools von MySQL

  • SHOW FULL PROCESSLIST: Aktuelle aktive Abfragen anzeigen

  • EXPLAIN SELECT ...: Abfrageplan verstehen

  • SHOW INDEXES FROM tablename: Indexnutzung auswerten

  • INFORMATION_SCHEMA: Tabellen, Indizes und Tabellengrößen prüfen

11.2 Überwachungstools verwenden

MySQLTuner

Befehlszeilenskript zum Bewerten der MySQL-Leistung:

bash

perl mysqltuner.pl

Gibt Vorschläge zu Puffergrößen, Indexnutzung, langsamen Abfragen und Speichernutzung.

Percona-Toolkit

Erweiterte Suite zur Analyse von Leistung und Replikation.

Adminer / phpMyAdmin

Verwenden Sie es, um Tabellengrößen, Abfragepläne und Leistungsmetriken mit der Benutzeroberfläche zu überprüfen.

Netdata / Zabbix / Prometheus

Zur Überwachung der Full-Stack-Leistung, einschließlich Datenbankstatistiken.


12. Cron-Jobs und Hintergrundprozessoptimierung

Dolibarr verwendet Cron-Tasks für Hintergrundjobs wie:

  • E-Mail-Erinnerungen

  • Automatisch generierte Dokumente

  • Datensynchronisierungen

  • Geplante Importe/Exporte

Diese Jobs interagieren häufig mit der Datenbank.

12.1 Cron-Frequenz optimieren

Führen Sie nicht alle Jobs jede Minute aus. Planen Sie Jobs nach Bedarf.

bash

*/15 * * * * php htdocs/scripts/emailings/cron_emailing_send.php 0 3 * * * php htdocs/scripts/invoices/cron_invoice_reminder.php

12.2 Profilintensive Cron-Jobs

Wenn ein Cron-Job alle 5 Sekunden eine 60-Sekunden-Abfrage auslöst, kann dies die Leistung beeinträchtigen.

  • Abfragedauer in Skripten protokollieren

  • Verwenden Sie das Protokoll langsamer Abfragen, um lang laufende Hintergrundabfragen zu verfolgen

  • Reduzieren Sie den Umfang oder die Batchgröße in umfangreichen Verarbeitungsskripten


13. Best Practices für die langfristige Datenbankgesundheit

Verwenden Sie Backups und testen Sie Wiederherstellungen

Führen Sie immer automatisierte, externe Backups durch. Testen Sie diese monatlich.

Führen Sie regelmäßig Wartungsskripte aus

  • OPTIMIZE TABLE für fragmentierte Tabellen

  • Indizes neu erstellen

  • Protokolle und historische Aufzeichnungen bereinigen

Verwenden Sie eine Staging-Umgebung

Testen Sie Abfragen und Schemaänderungen vor der Produktion in einer Sandbox.

Benutzerdefinierten Code prüfen

Überprüfen Sie alle 6 Monate benutzerdefinierte Module auf fehlerhafte Abfragen, fehlende Indizes und nicht optimierte Verknüpfungen.

Benutzer schulen

Das Nutzerverhalten beeinflusst die Leistung. Vermeiden Sie umfangreiche Exporte oder Suchvorgänge ohne Filter.


14. Häufige Fehler und wie man sie vermeidet

Fehler Fixieren
Keine Verwendung von Indizes für große Tabellen Fügen Sie Indizes für Spalten hinzu, die in WHERE und JOIN verwendet werden.
Alles standardmäßig speichern llx_* Tabellen Verwenden Sie benutzerdefinierte Tabellen in benutzerdefinierten Modulen
Alle Cron-Jobs zu häufig ausführen Verteilen Sie die Cron-Ausführungszeit und die Prüfaufgabenlast
Ignorieren des langsamen Abfrageprotokolls Aktivieren Sie es und überprüfen Sie es monatlich
Nutzung von Shared Hosting für wachsendes ERP Wechseln Sie zu VPS oder Cloud-Instanz
Alte Daten nicht bereinigen Regelmäßig archivieren und bereinigen
Verlassen Sie sich auf reine GUI-Tools Erfahren Sie, wie Sie Abfragen über Befehlszeilentools profilieren

15. Fazit

Die Dolibarr-Datenbank bildet das Rückgrat Ihres ERP-Systems und erfordert wie jede kritische Systemkomponente Sorgfalt, Aufmerksamkeit und regelmäßige Optimierung. Mit dem Wachstum Ihres Unternehmens und der Zunahme Ihrer Datenmengen wird die Optimierung nicht nur zu einem netten Extra, sondern zu einem wesentlichen Bestandteil der Systemadministration.

Durch Kombinieren Optimierung auf Serverebene, MySQL-Tuning, Indizierungsstrategien und DatenhygieneStellen Sie sicher, dass Ihre Dolibarr-Instanz auch weiterhin optimale Leistung erbringt. Mit einem strukturierten Ansatz und den richtigen Tools bleiben selbst große Installationen über Jahre hinweg reaktionsfähig, stabil und skalierbar.


16. Tools und Ressourcen