So optimieren Sie ownCloud 10-Datenbankindizes sicher
Eine langsame Auflistung der ownCloud-Ordner, verzögerte Synchronisierung oder ein langlaufender Cronjob können auf einen Datenbankengpass hindeuten. Das unüberlegte Hinzufügen von Indizes kann jedoch die Serverzuverlässigkeit beeinträchtigen. In ownCloud Server 10 empfiehlt es sich, zunächst die genaue Version und Datenbank zu überprüfen, die Instanz zu sichern und anschließend nur die für diese ownCloud-Version dokumentierten Schemaänderungen zu verwenden. Indizes erleichtern zwar selektive Suchen und Verknüpfungen, belegen aber auch Speicherplatz und erhöhen den Aufwand bei Einfüge- und Aktualisierungsvorgängen.
Es gibt einen wichtigen Versionsunterschied: Die aktuelle offizielle ownCloud Server 10.16-Befehlsreferenz beschreibt Datenbankoperationen wie die Datenbankkonvertierung, jedoch keinen allgemeinen db:add-missing-indicesReparaturbefehl. Dieser Befehl ist in der Nextcloud-Dokumentation zu finden, einem separaten Produkt. Überprüfen Sie die Befehle auf Ihrem eigenen Server, bevor Sie einen aus einem anderen Projekt kopierten Befehl ausführen.
Der occ statusBefehl bestätigt, dass die CLI die ownCloud-Installation erreicht, bevor die Datenbankarbeit beginnt.
Was ein Datenbankindex beheben kann – und was nicht.
Ein Datenbankindex ist eine Hilfsstruktur, die der Datenbank hilft, übereinstimmende Zeilen zu finden, ohne die gesamte Tabelle durchsuchen zu müssen. Er kann die Ausführungsgeschwindigkeit von Abfragen verbessern, die nach indizierten Spalten filtern, verknüpfen oder sortieren, wenn die Abfrage und die Datenverteilung den Index sinnvoll machen. Er ist kein allgemeiner Geschwindigkeitsregler: Der Datenbankoptimierer kann bei kleinen Tabellen oder Abfragen, die einen großen Anteil der Zeilen zurückgeben, auch einen Tabellenscan korrekt durchführen.
Indizes verursachen auch Kosten. Sie belegen Speicherplatz, müssen bei Änderungen an Zeilen aktualisiert werden und können schreibintensive Prozesse verlangsamen. Zusätzliche Indizes in ownCloud-Kerntabellen können zu Konflikten mit Schema-Migrationen oder Anwendungserwartungen führen. Fügen Sie keinen Index hinzu, nur weil ein Spaltenname wichtig erscheint; identifizieren Sie zuerst die langsame Anfrage und prüfen Sie, ob der tatsächliche Abfrageplan ineffizient ist.
1. Bestätigen Sie den ownCloud-Build und die Datenbank.
Führen Sie Befehle aus dem ownCloud-Installationsverzeichnis als Webserver-Konto aus. Bei einer typischen Debian- oder Ubuntu-Installation ist dieses Konto www-data:
cd /var/www/owncloud
sudo -u www-data php occ status
sudo -u www-data php occ list
Verwenden Sie den auf Ihrem Host konfigurierten Pfad und das Dienstkonto. Verwenden Sie in Docker die dokumentierte Befehlsform des Containers – beispielsweise verwendet das ownCloud-Handbuch die entsprechende Befehlsform docker compose exec owncloud occ …. Die Statusausgabe zeigt die ownCloud-Version und den Datenbanktyp an. Die Befehlsliste zeigt, welche Funktionen diese Installation tatsächlich unterstützt. Wenn ein Befehl zur Datenbankreparatur nicht aufgeführt ist, gelten die Nextcloud-Anweisungen nicht.
Prüfen Sie die Administratorübersicht von ownCloud auf Einrichtungswarnungen und notieren Sie sich die genauen Tabellen- und Indexnamen, falls ein fehlender Index gemeldet wird. Dokumentieren Sie außerdem, was langsam ist: eine bestimmte Dateisuche, eine Freigabeseite, ein Hintergrundprozess oder ein Synchronisierungsvorgang. Eine vage Beschwerde wie „ownCloud ist langsam“ reicht nicht aus, um eine Schemaänderung zu rechtfertigen.
Verwenden Sie die Liste der installierten occBefehle als Versionsprüfung; die Befehlsverfügbarkeit kann zwischen ownCloud und Nextcloud unterschiedlich sein.
2. Vor Änderungen an den Datenbankstrukturen unbedingt ein Backup erstellen.
Vor der Erstellung eines Indexes, der Migration oder Reparatur einer Datenbank sollten Sie unbedingt eine konsistente Sicherung der Datenbank und der ownCloud-Konfiguration erstellen und sich mit der Wiederherstellung vertraut machen. Die ownCloud-Sicherungsanleitung empfiehlt, vor der Datenbanksicherung den Wartungsmodus zu aktivieren. Der genaue Befehl zum Erstellen eines Datenbank-Dumps hängt davon ab, ob der Server MySQL, MariaDB, PostgreSQL oder SQLite verwendet. Nutzen Sie die entsprechenden Tools des Datenbankanbieters und schützen Sie Ihre Zugangsdaten und Sicherungsdateien.
sudo -u www-data php occ maintenance:mode --on
# Back up the database and ownCloud configuration with your vendor's procedure
# Confirm that the backup can be restored before proceeding
Der Wartungsmodus verhindert den normalen Betrieb während der Wartungsarbeiten; planen Sie ein Wartungsfenster für den Produktivbetrieb ein. Kopieren Sie keine Live-Datenbankdatei als Ersatz für eine datenbankbezogene Sicherung. Sobald die Arbeiten und grundlegenden Prüfungen abgeschlossen sind, stellen Sie die Instanz wieder in den Normalmodus zurück.
sudo -u www-data php occ maintenance:mode --off
Bevor Sie eine Index- oder Schemaänderung vornehmen, sollten Sie eine wiederherstellbare Datenbank- und Konfigurationssicherung erstellen.
3. Verwenden Sie die von ownCloud verwalteten Migrationen für ownCloud-Schemaänderungen.
Aktualisieren Sie ownCloud und die zugehörigen Apps zunächst auf eine unterstützte Version, indem Sie die offiziellen Upgrade-Anweisungen und Versionshinweise befolgen. ownCloud-Upgrades führen Datenbankmigrationen durch, die das Schema aktualisieren und die für den Kern und die Apps erforderlichen Änderungen beinhalten. Die offizielle Anleitung empfiehlt, den Datenbank-Upgrade-Schritt occfür größere Systeme durchzuführen, da es bei Webanfragen zu Timeouts kommen kann.
Wenn die Administratorübersicht weiterhin einen fehlenden Index meldet, überprüfen Sie sudo -u www-data php occ listdie entsprechende offizielle Dokumentation für Ihre spezifische ownCloud-Version. Einige Anleitungen von Drittanbietern erwähnen db:add-missing-indicesden Befehl `npm install`, dieser ist jedoch im Abschnitt über Datenbankbefehle für ownCloud 10.16, der für diesen Artikel untersucht wurde, nicht dokumentiert. Falls Ihre Version diesen Befehl enthält, lesen Sie die zugehörige Hilfe und bestätigen Sie die Vorgehensweise anhand der Dokumentation oder des App-Anbieters für diese Version, bevor Sie ihn ausführen. Falls der Befehl fehlt, installieren Sie keinen Nextcloud-Befehl, bearbeiten Sie die ownCloud-Kerntabellen nicht manuell und kopieren Sie keine SQL-Anweisungen aus einer anderen Version. Teilen Sie ownCloud oder dem App-Betreuer die Warnung, die ownCloud-Version, den Datenbanktyp und die relevanten Protokolle mit.
Die im ownCloud-Handbuch aufgeführten Datenbankbefehle – wie beispielsweise `convert` db:convert-typeoder db:convert-mysql-charset`index.txt` – dienen spezifischen Konvertierungsaufgaben; sie sind keine allgemeinen Befehle zur Indexoptimierung. Verwenden Sie einen Konvertierungsbefehl nicht, um die Abfragegeschwindigkeit zu verbessern.
4. Untersuchen Sie eine langsame Abfrage mit datenbankeigenen Tools.
Wenn Sie eine langsame SQL-Abfrage identifizieren können, verwenden Sie die Analysetools Ihrer Datenbank. MySQL und MariaDB bieten `sql.column` EXPLAIN; PostgreSQL bietet ebenfalls ` EXPLAINsql.column` mit eigener Ausgabe und Optionen. Beginnen Sie mit einem Ausführungsplan, der die Abfrage erklärt, ohne sie auszuführen. Seien Sie vorsichtig mit der Option `analyze`: Einige Datenbankvarianten führen die `sql.column`-Anweisung aus, was beim Schreiben unsicher oder in einer stark ausgelasteten Produktionsdatenbank ressourcenintensiv sein kann.
EXPLAIN SELECT ... FROM oc_filecache WHERE ...;
Prüfen Sie, ob der Ausführungsplan deutlich mehr Zeilen liest, als die Abfrage zurückgibt, ob der erwartete Index berücksichtigt wird und ob Sortierung oder Joins den größten Teil der Arbeit ausmachen. Ein vom Optimierer nicht ausgewählter Index fehlt nicht automatisch: Wenn die Abfrage viele Zeilen zurückgibt, kann ein Scan effizienter sein. Vergleichen Sie dieselbe Arbeitslast auf einer repräsentativen Testumgebung, bevor Sie datenbankspezifische Änderungen vornehmen. OwnCloud Core-SQL und Tabellenlayouts können sich mit jeder neuen Version ändern. Daher kann ein Index, der heute nützlich erscheint, nach einem Upgrade überflüssig oder unsicher werden.
Bevor Sie einen benutzerdefinierten Index in Betracht ziehen, sollten Sie den datenbankspezifischen Abfrageplan für die tatsächlich langsame Abfrage prüfen.
5. Überprüfen Sie das ursprüngliche Symptom erneut.
Nach Abschluss einer unterstützten Migration oder einer genehmigten Indexreparatur überprüfen Sie erneut die ownCloud-Administratorübersicht und die Server- und Datenbankprotokolle auf Fehler. Wiederholen Sie die langsame Benutzeraktion oder den Hintergrundprozess mit ähnlichem Datenvolumen und unter vergleichbaren Bedingungen. Vergleichen Sie Antwortzeit, CPU- und E/A-Auslastung der Datenbank sowie die Anzahl der untersuchten Zeilen, sofern Ihre Datenbank diese Messwerte bereitstellt. Melden Sie keine Leistungsverbesserungen aufgrund eines einzelnen kleinen Tests oder eines nicht relevanten Seitenaufrufs.
Wenn die Warnung verschwunden ist, die gleiche Aktion aber weiterhin langsam ist, liegt der Flaschenhals möglicherweise woanders: Speicherlatenz, PHP-Worker, Netzwerk-Roundtrips, Cron-Backlog, Dateisperrungen oder Speichercaching. ownCloud empfiehlt Speichercaching und externe transaktionale Dateisperrungen, um die Datenbanklast zu reduzieren. Diese Einstellungen betreffen andere Aufgaben als ein Datenbankindex. Konfigurieren Sie sie daher gemäß dem offiziellen Handbuch und Ihrer Bereitstellungstopologie.
Kurzcheckliste
Notieren Sie die ownCloud-Version, den Datenbanktyp, die betroffene Aktion und alle genauen Konfigurationswarnungen.
Überprüfen Sie die occListe der installierten Befehle; unterscheiden Sie ownCloud-Anweisungen von Nextcloud-Anweisungen.
Erstellen und überprüfen Sie vor der Schema-Arbeit eine konsistente Sicherung der Datenbank und der Konfiguration.
Verwenden Sie die von der Versionsnummer vorgegebenen Schritte für das ownCloud-Upgrade und die App-Migration; nehmen Sie keine manuellen Änderungen an den Kerntabellen ohne versionsspezifische Anweisungen vor.
Verwenden Sie die Abfrageplan-Tools des Datenbankanbieters für die tatsächlich langsame Abfrage und wiederholen Sie anschließend die gleiche Arbeitslast, um das Ergebnis zu überprüfen.
Es gibt keinen universellen Indexsatz, der jede ownCloud 10-Installation beschleunigt. Der nachhaltige Ansatz besteht darin, das unterstützte Schema aktuell zu halten, die tatsächliche Abfrage zu analysieren, nur die vom jeweiligen Anbieter oder Wartungsteam dokumentierten Änderungen vorzunehmen und anschließend dieselbe Arbeitslast zu testen.