Bei ownCloud 10 sollten Sie zunächst die Schemaänderungen anwenden, die durch die installierten Core- und App-Komponenten bereitgestellt werden. Anschließend überprüfen Sie, welche Datenbankabfragen tatsächlich langsam sind. Fügen Sie keine Indizes wahllos hinzu und gehen Sie nicht davon aus, dass der Nextcloud-Befehl db:add-missing-indicesein unterstützter Reparaturbefehl für ownCloud 10 ist: Die aktuelle ownCloud Server 10.15 OCC-Referenz dokumentiert dies nicht. Indizes können zwar Lesezugriffe beschleunigen, aber jeder hinzugefügte Index belegt Speicherplatz und erhöht den Aufwand bei Einfüge-, Aktualisierungs- und Löschvorgängen.
Dieser Ansatz eignet sich für Administratoren, deren ownCloud-Seiten, Dateilisten oder Anwendungen langsam laden und die Zugriff auf Server und Datenbank haben. Ist die gesamte Instanz langsam oder läuft sie mit mehreren aktiven Benutzern auf SQLite, sollten Sie die Datenbank- und Bereitstellungskonfiguration überprüfen, bevor Sie die Indizes als Ursache in Betracht ziehen.
Wählen Sie die Änderung, die am besten zu den Beweisen passt.
Ein Datenbankindex ist eine Hilfsstruktur, die der Datenbank hilft, Zeilen zu finden, ohne eine gesamte Tabelle durchsuchen zu müssen. ownCloud und seine Anwendungen definieren Tabellen, Spalten und Indizes als Teil ihres Schemas. Core- und Anwendungsupdates können Schema-Migrationen beinhalten, die diese Indizes erstellen oder anpassen. Daher ist es ratsam, das Anwendungsschema stets aktuell zu halten.
Beachten Sie die folgenden Unterscheidungen, bevor Sie irgendetwas ändern:
- Administratorwarnung oder bekanntes Upgrade-Problem: Führen Sie die normale ownCloud-Upgrade-Prozedur durch und überprüfen Sie die Ausgabe. Upgrade-Migrationen sind der empfohlene Weg für Schemaänderungen, die von ownCloud oder einer App bereitgestellt werden.
- Eine bekannte langsame Abfrage mit ineffizientem Ausführungsplan: Lassen Sie einen Datenbankadministrator die Abfrage und den Plan überprüfen. Ein gezielter Index kann Abhilfe schaffen, aber die vorgeschlagenen Spalten und deren Reihenfolge müssen mit der Abfrage und der Tabellendefinition übereinstimmen.
- Langsame Uploads, Sperrungen oder umfangreiche Konflikte: Untersuchen Sie Transaktionen, Speicherlatenz, Datenbankkapazität und Dateisperrungen. Diese Symptome beweisen allein noch keinen fehlenden Index.
- Wenn eine kleine SQLite-Installation auf mehrere Benutzer umgestellt werden soll, empfiehlt sich eine Migration zu MySQL/MariaDB oder PostgreSQL. ownCloud beschreibt SQLite als geeignet für Tests und kleine Einzelbenutzer-Workloads, während für produktive Mehrbenutzer-Umgebungen eine unterstützte Serverdatenbank verwendet werden sollte.
Ein Index ist kein allgemeiner Geschwindigkeitsregler. Mehrere Indizes können zwar die Suchgeschwindigkeit bestimmter Datenbankabfragen verbessern, erhöhen aber gleichzeitig die Datenbankgröße und die Schreiblatenz. Das Ergebnis hängt von der Abfrageform, der Tabellengröße, der Datenverteilung, der Datenbank-Engine und dem Cache-Status ab.
Bereiten Sie ein sicheres Wartungsfenster vor
- Notieren Sie sich die genauen Versionen und die Datenbank. Führen Sie im ownCloud-Installationsverzeichnis den Befehl aus
sudo -u www-data ./occ status. Notieren Sie sich die ownCloud-Version, die Versionen der installierten Anwendungen, den Datenbanktyp und das Tabellenpräfix aus der Ausgabe config/config.php. Ersetzen Sie www-data<Webserver-Konto> durch das Webserver-Konto Ihrer Distribution. - Erfassen Sie die Ursache der Verzögerung. Notieren Sie den betroffenen Bildschirm oder die betroffene App, die ungefähre Dauer und ob die Verzögerung wiederholt auftritt. Überprüfen Sie die ownCloud-Protokolle und die Diagnosefunktionen Ihrer Datenbank für langsame Abfragen. Aktivieren Sie die Abfrageprotokollierung nur gemäß den Empfehlungen Ihres Datenbankanbieters, da Protokolle sensible SQL-Werte enthalten und schnell anwachsen können.
- Sichern Sie die Datenbank und die Konfiguration. Verwenden Sie eine datenbankkonsistente Sicherungsmethode und stellen Sie sicher, dass die Sicherung lesbar ist. Die Sicherungsdokumentation von ownCloud verwendet
mysqldump --single-transactionMySQL-kompatible Datenbanken als Beispiel; passen Sie die Werte für Host, Benutzer und Datenbank an Ihre Konfiguration an. Speichern Sie das Datenbankpasswort niemals direkt in der Shell-Historie oder einer Prozessliste. - Planen Sie Änderungen verantwortungsvoll. Ein Schema-Upgrade oder der Aufbau eines Indexes kann Festplattenzugriffe, CPU-Leistung und Sperren beanspruchen. Informieren Sie bei einer stark ausgelasteten oder großen Installation die Benutzer über das Zeitfenster und überwachen Sie die Datenbankauslastung. Verwenden Sie den ownCloud-Wartungsmodus nur, wenn dies im jeweiligen Upgrade- oder Wartungsverfahren erforderlich ist; aktivieren Sie ihn nicht als Ersatz für eine Datensicherung.
Wenden Sie zuerst die von ownCloud verwalteten Schema-Updates an.
Wenn ein ownCloud-Core- oder App-Update aussteht, verwenden Sie den dokumentierten Aktualisierungsprozess für Ihre Installationsmethode. Bei einer herkömmlichen Linux-Installation wird der OCC-Befehl als HTTP-Benutzer im ownCloud-Stammverzeichnis ausgeführt. Bei Befolgung der manuellen Aktualisierungsanleitung lautet der Befehl:
sudo -u www-data ./occ upgrade
Führen Sie das Upgrade nicht auf einer Installation durch, deren Dateien nur teilweise aktualisiert wurden. Laden Sie zunächst die passenden Release-Dateien herunter und befolgen Sie die offiziellen Upgrade-Schritte für dieses Release. Verwenden Sie bei Docker-Bereitstellungen den dokumentierten OCC-Aufruf des Containers anstelle eines Host-Pfads, der auf eine andere PHP-Umgebung verweist.
Lesen Sie die vollständige Befehlsausgabe und die Protokolle. Ein erfolgreicher Befehl sollte ohne gemeldeten Migrationsfehler abgeschlossen werden; dies garantiert jedoch nicht, dass alle langsamen Abfragen behoben sind. Wenn das Update einen Migrationsfehler meldet, brechen Sie den Vorgang ab und untersuchen Sie den Fehler, anstatt den Befehl wiederholt auszuführen oder Schematabellen manuell zu bearbeiten. Konsultieren Sie die versionsspezifische ownCloud-Upgrade-Dokumentation und den App-Betreuer, wenn eine App-Migration erforderlich ist.
Die ownCloud 10.15 OCC-Referenz listet Datenbankbefehle wie db:convert-type`get`, db:convert-mysql-charset`get` und ` db:restore-default-row-formatget` auf, jedoch nicht `get` db:add-missing-indices. Da die Verfügbarkeit von Befehlen je nach Version und installiertem Code variieren kann, können Sie Ihre eigene Instanz mit `get` sudo -u www-data ./occ list dboder ` get` überprüfen sudo -u www-data ./occ help db:add-missing-indices. Falls `get` einen unbekannten Befehl meldet, kopieren Sie den Befehl aus einem Nextcloud-Tutorial nicht in ownCloud. Prüfen Sie stattdessen die Dokumentation Ihrer genauen ownCloud-Version und verwenden Sie den unterstützten Upgrade- oder App-Migrationspfad.
Wann ist ein manuelles Register angebracht?
Manuelle SQL-Optimierung ist eine Option für Datenbankadministratoren bei nachgewiesenen Abfrageproblemen und keine routinemäßige ownCloud-Optimierung. Erfassen Sie zunächst die exakte langsame Abfrage und führen Sie das Planinspektionstool der Engine aus, z. B. EXPLAINfür MySQL/MariaDB oder PostgreSQL. Prüfen Sie, ob der Plan unnötig viele Zeilen durchsucht und ob ein vorhandener Index ignoriert wird. Das ownCloud-Tabellenpräfix ist konfigurierbar, gehen Sie daher niemals davon aus, dass Tabellennamen mit „/“ beginnen oc_.
Vergleichen Sie vor dem Erstellen eines Index die vorgeschlagenen Spalten mit den Filtern, Joins und der Sortierreihenfolge der Abfrage. Die Spaltenreihenfolge eines zusammengesetzten Index ist wichtig; das Duplizieren eines bestehenden Index kann zusätzliche Kosten verursachen, ohne den Ausführungsplan zu verbessern. Bitten Sie einen Datenbankadministrator, das Verhalten der Datenbankversion, die Unterstützung für Online- oder parallele Indexerstellung, den verfügbaren Speicherplatz, die Auswirkungen von Sperren und das Rollback-Verfahren zu berücksichtigen. Diese Details sind engine- und versionsspezifisch, daher gibt es keine allgemeingültige SQL-Anweisung für jede ownCloud 10-Installation.
Ändern Sie ownCloud-Tabellen nicht und entfernen Sie keine Indizes nur, weil ein Name redundant erscheint. Solche Änderungen können zu Konflikten mit einer späteren Core- oder App-Migration führen und Funktionen beeinträchtigen, die eine andere Abfrage verwenden als die von Ihnen untersuchte. Dokumentieren Sie jede manuelle Schemaänderung schriftlich und stellen Sie sicher, dass sie nach einer Wiederherstellung oder Migration reproduziert werden kann. Verwenden Sie vorzugsweise einen unterstützten ownCloud-Patch oder ein App-Release, wenn der fehlende Index auf einen Fehler im Produktschema zurückzuführen ist.
Vergleichen Sie Alternativen auf Datenbankebene
Wenn der Plan bereits einen geeigneten Index verwendet, wird das Hinzufügen eines weiteren Index eine an anderer Stelle verursachte Verzögerung wahrscheinlich nicht beheben. Vergleichen Sie diese Optionen mit dem beobachteten Engpass:
- MySQL oder MariaDB: Eine gängige Lösung für Umgebungen, deren Administratoren diese Datenbanken bereits einsetzen. Überprüfen Sie vor der Änderung der Servereinstellungen den Pufferspeicher, die Festplattenlatenz, die Verbindungen und die Ausführungspläne für langsame Abfragen.
- PostgreSQL ist eine unterstützte Alternative für ownCloud 10, sofern der PHP-Datenbankkonnektor und die Bereitstellung korrekt konfiguriert sind. Die Abfragepläne und Indexverwaltungstools unterscheiden sich von MySQL; beachten Sie daher die spezifischen Hinweise zu PostgreSQL.
- SQLite ist einfach zu bedienen und eignet sich für Tests oder den Einsatz durch wenige Einzelbenutzer, ist aber nicht die Standardwahl für produktive Arbeitslasten mit mehreren Benutzern. Die Indexoptimierung kann die Beschränkungen der Parallelität der Bereitstellung nicht aufheben.
Der Wechsel der Datenbank-Engine ist ein Migrationsprojekt und keine einfache Indexanpassung. ownCloud bietet occ db:convert-typeUnterstützung für solche Konvertierungen; prüfen Sie die Voraussetzungen, erstellen Sie vorher ein Backup und testen Sie die konvertierte Instanz, bevor Sie Benutzer darauf verweisen.
Überprüfen Sie das Ergebnis und stoppen Sie den Vorgang, wenn die Beweislage nicht übereinstimmt.
Wiederholen Sie dieselbe Benutzeraktion unter vergleichbaren Bedingungen und vergleichen Sie Abfragedauer, Ausführungsplan, Anzahl der untersuchten Zeilen, Datenbank-E/A und Serverlast. Stellen Sie sicher, dass die entsprechende ownCloud-Seite oder -App ordnungsgemäß geladen wird und die Protokolle keine Datenbank- oder Migrationsfehler aufweisen. Ein schnelleres Ergebnis bei einer einzelnen Anfrage beweist keine generelle Verbesserung; vergleichen Sie daher mehrere repräsentative Anfragen und berücksichtigen Sie dabei möglicherweise belegte Caches.
Wenn dieselbe Abfrage trotz Verwendung eines geeigneten Index weiterhin langsam ist, überprüfen Sie Sperren, Speicherkapazität, Netzwerklatenz, PHP-Worker und Datenbankressourcenbeschränkungen. Ist der Abfrageplan oder die Tabellenstruktur unklar, brechen Sie die manuelle DDL-Ausführung ab und bitten Sie einen Datenbankadministrator oder den ownCloud-Support um Überprüfung. Das zuverlässige Ergebnis ist ein Schema, das mit der installierten ownCloud-Version und den gemessenen Abfragen übereinstimmt und keine unbemerkten Indexänderungen aufweist.
Offizielle Referenzen