Begin bij ownCloud 10 met het toepassen van de schemawijzigingen die door de geïnstalleerde core en apps worden geleverd, en controleer vervolgens welke databasequery's daadwerkelijk traag zijn. Voeg niet blindelings indexen toe en ga er niet vanuit dat de Nextcloud-opdracht db:add-missing-indiceseen ondersteunde ownCloud 10-reparatieopdracht is: de huidige ownCloud Server 10.15 OCC-referentie documenteert deze niet. Indexen kunnen het lezen van overeenkomende gegevens versnellen, maar elke toegevoegde index verbruikt opslagruimte en verhoogt de belasting van invoegingen, updates en verwijderingen.
Deze aanpak is geschikt voor een beheerder die een trage ownCloud-pagina, bestandslijst of app-werking heeft en toegang heeft tot de server en database. Als de hele instantie traag is, of als deze op SQLite draait met meerdere actieve gebruikers, controleer dan eerst de database en de implementatieconfiguratie voordat u indexen als oorzaak aanwijst.
Kies de verandering die overeenkomt met het bewijs.
Een database-index is een hulpstructuur die de database helpt rijen te vinden zonder een hele tabel te hoeven doorzoeken. ownCloud en de bijbehorende apps definiëren tabellen, kolommen en indexen als onderdeel van hun schema. Core- en app-updates kunnen schema-migraties omvatten die deze indexen aanmaken of aanpassen. Het actueel houden van het applicatieschema is daarom de veiligste eerste stap.
Houd rekening met de volgende onderscheidingen voordat u iets wijzigt:
- Beheerderswaarschuwing of bekend upgradeprobleem: voer de normale ownCloud-upgradeprocedure uit en controleer de uitvoer. Upgrademigraties zijn de ondersteunde methode voor schemawijzigingen die door ownCloud of een app worden aangeleverd.
- Een bekende trage query met een inefficiënt uitvoeringsplan: laat een databasebeheerder de query en het plan controleren. Een gerichte index kan helpen, maar de voorgestelde kolommen en volgorde moeten overeenkomen met de query en de tabeldefinitie.
- Trage uploads, blokkeringen of algemene concurrentie: onderzoek transacties, opslaglatentie, databasecapaciteit en bestandsvergrendeling. Deze symptomen bewijzen op zichzelf niet dat er een index ontbreekt.
- Een kleine SQLite-installatie die door meerdere gebruikers wordt gebruikt: overweeg migratie naar MySQL/MariaDB of PostgreSQL. ownCloud beschrijft SQLite als geschikt voor testen en kleine workloads voor één gebruiker, terwijl voor productieomgevingen met meerdere gebruikers een ondersteunde serverdatabase moet worden gebruikt.
Een index is geen algemene snelheidsregelaar. Meer indexen kunnen bepaalde zoekopdrachten verbeteren, maar tegelijkertijd de databasegrootte en de schrijfvertraging verhogen. Het resultaat hangt af van de querystructuur, de tabelgrootte, de dataverdeling, de database-engine en de cachestatus.
Zorg voor een veilig onderhoudsvenster.
- Noteer de exacte versies en database. Voer vanuit de installatiemap van ownCloud het volgende commando uit: `ownCloud version`
sudo -u www-data ./occ status. Noteer de ownCloud-versie, de geïnstalleerde app-versies, het databasetype en het tabelvoorvoegsel uit het bestand `ownCloud version` config/config.php. Vervang ` www-dataownCloud version` door het webserveraccount op uw distributie. - Leg de trage werking vast. Noteer het betreffende scherm of de betreffende app, het geschatte tijdstip en of de vertraging zich herhaalt. Bekijk de ownCloud-logboeken en de diagnostische gegevens voor trage query's van uw database. Schakel querylogging alleen in volgens de richtlijnen van uw databaseleverancier, omdat logboeken gevoelige SQL-waarden kunnen bevatten en snel kunnen groeien.
- Maak een back-up van de database en de configuratie. Gebruik een databaseconsistente back-upmethode en controleer of de back-up leesbaar is. De back-updocumentatie van ownCloud gebruikt
mysqldump --single-transactionals voorbeeld MySQL-compatibele databases; pas de waarden voor host, gebruiker en database aan uw configuratie aan. Plaats geen databasewachtwoord rechtstreeks in de shellgeschiedenis of een proceslijst. - Plan wijzigingen verantwoordelijk in. Een schema-upgrade of indexopbouw kan schijf-I/O, CPU en vergrendelingen verbruiken. Informeer gebruikers bij een drukke of grote installatie over het tijdsvenster en monitor de databasebelasting. Gebruik de ownCloud-onderhoudsmodus alleen wanneer de betreffende upgrade- of onderhoudsprocedure dit vereist; schakel deze niet in als vervanging voor een back-up.
Voer eerst de door ownCloud beheerde schema-updates uit.
Als er een update voor ownCloud core of een app beschikbaar is, volg dan de gedocumenteerde upgradeprocedure voor uw installatiemethode. Bij een standaard Linux-installatie wordt de OCC-opdracht uitgevoerd als de HTTP-gebruiker vanuit de rootmap van ownCloud. Bij het volgen van de handmatige upgrade-instructies is de opdracht:
sudo -u www-data ./occ upgrade
Voer dit niet uit op een installatie waarvan de bestanden slechts gedeeltelijk zijn bijgewerkt. Voeg eerst de bijbehorende releasebestanden toe aan de staging area en volg de officiële upgrade-stappen voor die release. Gebruik voor Docker-implementaties de gedocumenteerde OCC-aanroep van de container in plaats van een hostpad dat verwijst naar een andere PHP-omgeving.
Lees de volledige uitvoer van de opdracht en de logboeken. Een succesvolle opdracht zou moeten eindigen zonder dat er een mislukte migratie wordt gemeld; dit garandeert echter niet dat elke trage query is opgelost. Als de update een migratiefout meldt, stop dan en onderzoek die fout in plaats van de opdracht herhaaldelijk opnieuw uit te voeren of schema-tabellen handmatig te bewerken. Raadpleeg de versie-specifieke ownCloud-upgradedocumentatie en de app-beheerder wanneer een app-migratie een rol speelt.
De ownCloud 10.15 OCC-referentie vermeldt databaseopdrachten zoals db:convert-type, db:convert-mysql-charset, en db:restore-default-row-format, maar niet db:add-missing-indices. Omdat de beschikbaarheid van opdrachten kan variëren per release en geïnstalleerde code, kunt u uw eigen instantie inspecteren met sudo -u www-data ./occ list dbof sudo -u www-data ./occ help db:add-missing-indices. Als de laatste een onbekende opdracht meldt, kopieer dan geen opdracht uit een Nextcloud-tutorial naar ownCloud. Raadpleeg de documentatie voor uw specifieke ownCloud-release en gebruik het ondersteunde upgrade- of app-migratiepad.
Wanneer is een handmatige index geschikt?
Handmatige SQL is een optie voor databasebeheerders bij een geverifieerd queryprobleem, geen standaard optimalisatie van ownCloud. Leg eerst de exacte trage query vast en voer de planinspectietool van de engine uit, bijvoorbeeld EXPLAINvoor MySQL/MariaDB of PostgreSQL. Controleer of het plan een onnodig groot aantal rijen scant en of een bestaande index wordt genegeerd. Het ownCloud-tabelvoorvoegsel is configureerbaar, dus ga er nooit vanuit dat tabelnamen met een punt beginnen oc_.
Voordat u een index bouwt, vergelijk de voorgestelde kolommen met de filters, joins en sorteervolgorde van de query. De kolomvolgorde van een samengestelde index is belangrijk; het dupliceren van een bestaande index kan extra kosten met zich meebrengen zonder het plan te verbeteren. Vraag een DBA om rekening te houden met het gedrag van de databaseversie, ondersteuning voor online of gelijktijdige indexbouw, schijfruimte, impact van vergrendelingen en de rollbackprocedure. Deze details zijn engine- en versiespecifiek, dus er is geen enkele veilige SQL-instructie voor elke ownCloud 10-installatie.
Wijzig geen ownCloud-tabellen en verwijder geen indexen alleen omdat een naam overbodig lijkt. Dergelijke wijzigingen kunnen conflicteren met een latere core- of app-migratie en kunnen een functionaliteit die een andere query gebruikt dan degene die u hebt gecontroleerd, onbruikbaar maken. Leg elke handmatige schemawijziging schriftelijk vast en zorg ervoor dat deze na een herstel of migratie kan worden hersteld. Gebruik bij voorkeur een ondersteunde ownCloud-patch of app-release wanneer de ontbrekende index een defect in het eigen schema van het product is.
Vergelijk alternatieven op databaseniveau.
Als het plan al een geschikte index gebruikt, zal het toevoegen van een andere index waarschijnlijk geen vertraging oplossen die elders is ontstaan. Vergelijk deze opties met het geconstateerde knelpunt:
- MySQL of MariaDB: een veelvoorkomende keuze voor implementaties waarvan de beheerders deze databasesystemen al gebruiken. Controleer het buffergeheugen, de schijflatentie, de verbindingen en de plannen voor trage query's voordat u de serverinstellingen wijzigt.
- PostgreSQL: een ondersteund alternatief voor ownCloud 10, mits de PHP-databaseconnector en -implementatie correct zijn geconfigureerd. De queryplannen en indexbeheertools verschillen van die van MySQL, dus raadpleeg het specifieke advies voor PostgreSQL.
- SQLite: eenvoudig te gebruiken voor testen of kleinschalig gebruik door één gebruiker, maar niet de standaardkeuze voor een gelijktijdige productieomgeving met meerdere gebruikers. Indexoptimalisatie kan de gelijktijdigheidsbeperkingen van de implementatie niet opheffen.
Het wisselen van database-engine is een migratieproject, geen snelle indexaanpassing. ownCloud biedt occ db:convert-typeondersteuning voor conversies; bekijk de vereisten, maak eerst een back-up en test de geconverteerde instantie voordat u gebruikers ernaartoe verwijst.
Controleer het resultaat en stop als het bewijsmateriaal in tegenspraak is.
Herhaal dezelfde gebruikersactie onder vergelijkbare omstandigheden en vergelijk de queryduur, het uitvoeringsplan, het aantal onderzochte rijen, de database-I/O en de serverbelasting. Controleer of de betreffende ownCloud-pagina of -app normaal wordt voltooid en of de logboeken geen database- of migratiefouten tonen. Een sneller resultaat bij één verzoek bewijst niet automatisch een algehele verbetering; vergelijk meerdere representatieve verzoeken en houd rekening met warme caches.
Als dezelfde query traag blijft ondanks het gebruik van een geschikte index, onderzoek dan vergrendelingen, opslag, netwerklatentie, PHP-workers en de limieten van de databasebronnen. Als het queryplan of de tabelstructuur onduidelijk is, stop dan voordat u handmatig DDL uitvoert en vraag een DBA of een contactpersoon van ownCloud-ondersteuning om dit te controleren. Het betrouwbare resultaat is een schema dat is afgestemd op de geïnstalleerde ownCloud-versie en de gemeten query's, zonder ongetraceerde indexwijzigingen.
Officiële referenties