Ich bin ein großer Fan der open source Software „Nextcloud“. Das ist eine leistungsstarke Cloud, die man auch selbst hosten kann. Mit zunehmender Nutzung und wachsenden Datenmengen kann sie allerdings an Performance verlieren. Eine der häufigsten Ursachen für Leistungsprobleme liegt in der Datenbankkonfiguration.
In diesem Artikel berichte ich von meinen Erfahrungen bei der Optimierung einer Nextcloud-Installation und zeige, wie man die Datenbankleistung mit einfachen Änderungen deutlich verbessern kann.
Das Problem: Falsche Zeilenformate in der Datenbank
Bei routinemäßigen Überprüfungen meiner (und der von Kunden) Nextcloud-Installation stieß ich spätestens ab Version 31 auf folgende Fehlermeldung:
Falsches Zeilenformat in deiner Datenbank gefunden. ROW_FORMAT=Dynamic bietet die beste Datenbankleistung für Nextcloud. Bitte aktualisiere das Zeilenformat in der folgenden Liste: [lange Liste von Tabellen]

Dieses Problem tritt auf, weil Nextcloud für optimale Leistung das DYNAMIC-Zeilenformat in MySQL/MariaDB benötigt, während viele ältere Installationen standardmäßig andere Formate wie COMPACT oder REDUNDANT verwenden.
Was bedeutet ROW_FORMAT=DYNAMIC?
Das DYNAMIC-Zeilenformat ist eine Funktion der InnoDB-Engine in MySQL/MariaDB, die mehrere Vorteile bietet:
- Bessere Speichereffizienz für Tabellen mit großen Text- oder BLOB-Feldern
- Optimierter Speicherzugriff bei Verwendung von variablen Zeichenketten
- Verbesserte Performance bei Indizes auf langen Zeichenketten
- Reduzierte Fragmentierung bei häufigen Schreibvorgängen
All diese Faktoren können die Leistung von Nextcloud spürbar verbessern, besonders wenn viele Benutzer gleichzeitig darauf zugreifen.
Voraussetzungen prüfen
Bevor Sie Änderungen vornehmen, sollten Sie sicherstellen, dass die Datenbank die DYNAMIC-Formatfamilie überhaupt unterstützt. Neuere Versionen von MySQL (ab 8.0) und MariaDB (ab 10.3) haben die Barracuda-Dateiformatfamilie bereits standardmäßig aktiviert.
Um dies zu überprüfen, führen Sie folgende SQL-Abfrage in phpMyAdmin oder über die Kommandozeile aus:
SHOW VARIABLES LIKE 'innodb_file_per_table';
Bei modernen Installationen sollte der Wert ON
sein, was bedeutet, dass die Grundvoraussetzung erfüllt ist.
Bei älteren Versionen müsste man zusätzlich folgende Variablen prüfen:
SHOW VARIABLES LIKE 'innodb_file_format';
SHOW VARIABLES LIKE 'innodb_large_prefix';
Die Lösung: Umstellung auf DYNAMIC-Format
Um alle Tabellen auf das DYNAMIC-Format umzustellen, muss für jede Tabelle ein ALTER TABLE-Befehl ausgeführt werden. Hier ein Beispiel für die ersten Tabellen (der Präfix kann je nach Installation unterschiedlich sein):
ALTER TABLE prefix_accounts ROW_FORMAT=DYNAMIC;
ALTER TABLE prefix_accounts_data ROW_FORMAT=DYNAMIC;
ALTER TABLE prefix_activity ROW_FORMAT=DYNAMIC;
-- und so weiter für alle aufgelisteten Tabellen
Bei einer großen Anzahl von Tabellen kann das manuelles Erstellen dieser Befehle mühsam sein. Ich habe für meine Installation die komplette SQL-Anweisung mit einem Generator erstellt, um alle Tabellen effizienter zu bearbeiten.
Wichtige Sicherheitshinweise
Bevor man diese Änderungen durchführt, sind folgende Punkte zu beachten:
- Vollständige Sicherung der Datenbank erstellen
- Änderungen zu einem Zeitpunkt mit geringer Nutzung durchführen, da große Tabellen bei der Umformatierung viel Zeit in Anspruch nehmen können und man bei Problemen ein relativ großes Zeitfenster für die Fehlerbehebung hat
- Überprüfung ob nach der Umstellung alle Funktionen korrekt arbeiten
Optimierung der Protokollierung
Ein weiteres wichtiges Thema bei der Optimierung von Nextcloud ist die Protokollierung. Das Logfile kann mit der Zeit sehr groß werden, besonders wenn ein niedriger Log-Level eingestellt ist.
Wo befindet sich die Konfigurationsdatei?
Um die Protokollierungseinstellungen anzupassen, muss man zunächst die Nextcloud-Konfigurationsdatei lokalisieren. Diese befindet sich standardmäßig im Verzeichnis ‚config‘ innerhalb der Nextcloud-Installation und trägt den Namen ‚config.php‘. Der vollständige Pfad hängt von der Installationsmethode und dem Serversystem ab:
- Bei einer typischen Installation unter Linux:
/var/www/nextcloud/config/config.php
- Bei Shared-Hosting-Umgebungen: Oft in einem Pfad wie
/www/htdocs/[Benutzername]/nextcloud/config/config.php
- Bei Docker-Installationen: Im konfigurierten Verzeichnis des Volumes, das auf
/var/www/html/config/
im Container gemappt ist
Man sollte vor dem Bearbeiten der Datei sicherstellen, dass eine Sicherungskopie erstellt wird. Außerdem muss die Datei nach der Bearbeitung weiterhin für den Webserver lesbar, aber nicht für andere Benutzer zugänglich sein.
Log-Level anpassen
Der Log-Level bestimmt, wie ausführlich Nextcloud Ereignisse protokolliert:
- 0: DEBUG – Sehr ausführlich, alle Details
- 1: INFO – Informative Nachrichten
- 2: WARN – Warnungen
- 3: ERROR – Fehler, die die Funktionalität beeinträchtigen könnten
- 4: FATAL – Nur kritische Fehler
Für Produktivumgebungen empfehle ich Level 3 (ERROR), der einen guten Kompromiss zwischen nützlichen Informationen und Logfile-Größe bietet:
'loglevel' => 3,
Log-Rotation einrichten
Um zu verhindern, dass Logdateien unbegrenzt wachsen, sollte man eine Log-Rotation konfigurieren:
'log_rotate_size' => 52428800, // 50 MB
'log_max_history' => 5, // Maximal 5 alte Logdateien behalten
Diese Konfiguration sorgt dafür, dass die Logdatei bei einer Größe von 50 MB rotiert wird und maximal 5 alte Versionen aufbewahrt werden.
Wartungsfenster und Cron-Jobs konfigurieren
Für eine optimale Leistung benötigt Nextcloud regelmäßige Hintergrundaufgaben, die durch Cron-Jobs ausgeführt werden. Ohne Konfiguration eines spezifischen Wartungsfensters führt Nextcloud ressourcenintensive Aufgaben möglicherweise zu Zeiten hoher Nutzung aus, was die Benutzererfahrung erheblich beeinträchtigen kann.
Wartungsfenster einrichten
Um ein dediziertes Zeitfenster für ressourcenintensive Aufgaben festzulegen, kann man folgenden Eintrag der config.php hinzufügen:
'maintenance_window_start' => 1, // 1 = 01:00 Uhr nachts
Webcron für regelmäßige Aufgaben einrichten
Während das Wartungsfenster den Zeitpunkt für ressourcenintensive Aufgaben festlegt, benötigt Nextcloud auch regelmäßige, leichtgewichtige Hintergrundprozesse. Auf Shared-Hosting-Umgebungen ist Webcron oft die einzige verfügbare Methode, um diese Aufgaben auszuführen.
So richtet man einen Webcron ein:
- In den Nextcloud-Einstellungen unter „Grundeinstellungen“ > „Hintergrundaufgaben“ die Option „Webcron“ auswählen
- Die angezeigte URL kopieren (meist in der Form:
https://ihre-nextcloud.de/cron.php
) - Im Webhosting-Control-Panel (z.B. Plesk, cPanel, Confixx) einen neuen Cron-Job erstellen
- Den Job so konfigurieren, dass er alle 5 Minuten die kopierte URL aufruft
- Je nach Hosting-Anbieter kann dies durch Eingabe der URL oder durch einen Befehl wie
wget -q -O /dev/null "https://ihre-nextcloud.de/cron.php"
erfolgen
Die Häufigkeit von 5 Minuten bietet einen guten Kompromiss zwischen zeitnaher Ausführung und Serverbelastung. Für die meisten Nextcloud-Installationen ist dieser Wert optimal, um Benachrichtigungen, Synchronisationen und leichte Wartungsaufgaben effizient zu erledigen.
Die Kombination aus einem gut konfigurierten Webcron und einem festgelegten Wartungsfenster sorgt dafür, dass regelmäßige Aufgaben zeitnah ausgeführt werden, während ressourcenintensive Prozesse auf Zeiten mit geringer Nutzung beschränkt bleiben.
Fazit
Die Optimierung der Nextcloud-Datenbank durch Umstellung auf das DYNAMIC-Zeilenformat ist eine einfache, aber effektive Maßnahme, um die Performance deiner Installation zu verbessern. Zusammen mit einer gut konfigurierten Protokollierung und einem sinnvollen Wartungsfenster lässt sich die Leistungsfähigkeit und Zuverlässigkeit von Nextcloud deutlich steigern.
Denken Sie daran, dass regelmäßige Wartung und Überwachung entscheidend für die langfristige Leistung deiner Nextcloud-Installation sind. Für eine zuverlässige und sichere Nextcloud-Umgebung empfiehlt sich neben den beschriebenen Optimierungen auch die kontinuierliche Aktualisierung der Software und ein regelmäßiger Blick in die Systemprotokolle.