Come ottimizzare in modo sicuro gli indici del database di ownCloud 10
Un elenco di cartelle ownCloud lento, una sincronizzazione ritardata o un processo cron di lunga durata possono indicare un collo di bottiglia nel database, ma l'aggiunta indiscriminata di indici può rendere il server meno affidabile. In ownCloud Server 10, il punto di partenza più sicuro è verificare la versione e il database esatti, eseguire un backup dell'istanza e quindi utilizzare solo le modifiche allo schema documentate per quella versione di ownCloud. Gli indici possono facilitare le ricerche e le join selettive; tuttavia, consumano spazio di archiviazione e aumentano il carico di lavoro per gli inserimenti e gli aggiornamenti.
Esiste un'importante differenza tra le versioni: il manuale di riferimento ufficiale di ownCloud Server 10.16 documenta le operazioni sul database, come la conversione del database, ma non include un db:add-missing-indicescomando di riparazione generale. Tale comando è presente nella guida di Nextcloud, che è un prodotto separato. Prima di eseguire un comando copiato da un altro progetto, verificate i comandi sul vostro server.
Il occ statuscomando conferma che la CLI sta raggiungendo l'installazione di ownCloud prima che inizino le operazioni sul database.
Cosa può e non può risolvere un indice di database
Un indice di database è una struttura ausiliaria che aiuta il database a individuare le righe corrispondenti senza dover scansionare l'intera tabella. Può migliorare le prestazioni di una query che filtra, unisce o ordina le colonne indicizzate, quando la query e la distribuzione dei dati rendono l'indice utile. Non si tratta di un semplice interruttore di velocità: l'ottimizzatore del database può scegliere correttamente una scansione completa della tabella per tabelle di piccole dimensioni o query che restituiscono un numero elevato di righe.
Anche gli indici hanno un costo. Occupano spazio su disco, devono essere aggiornati quando le righe cambiano e possono rallentare le operazioni di scrittura intensive. Gli indici aggiuntivi sulle tabelle principali di ownCloud possono entrare in conflitto con le migrazioni dello schema o con le aspettative dell'applicazione. Non aggiungere un indice solo perché il nome di una colonna sembra importante; prima identifica la richiesta lenta e verifica che il piano di query effettivo sia inefficiente.
1. Conferma la build di ownCloud e il database
Eseguire i comandi dalla directory di installazione di ownCloud come account del server web. In una tipica installazione Debian o Ubuntu, tale account è www-data:
cd /var/www/owncloud
sudo -u www-data php occ status
sudo -u www-data php occ list
Utilizza il percorso e l'account di servizio configurati sul tuo host. In Docker, utilizza la forma di comando documentata del container, ad esempio, il manuale di ownCloud utilizza docker compose exec owncloud occ …. L'output di stato identifica la versione di ownCloud e il tipo di database. L'elenco dei comandi mostra ciò che questa installazione supporta effettivamente; se un comando di riparazione del database non è elencato, non dare per scontato che si applichino le istruzioni di Nextcloud.
Controlla la panoramica di amministrazione di ownCloud per eventuali avvisi di configurazione e annota i nomi esatti di tabelle e indici se viene segnalato un indice mancante. Registra anche cosa causa il rallentamento: una particolare ricerca di file, una pagina di condivisione, un'attività in background o un'operazione di sincronizzazione. Un reclamo generico come "ownCloud è lento" non è sufficiente a giustificare una modifica dello schema.
Utilizza l'elenco dei comandi installati occcome verifica della versione; la disponibilità dei comandi può variare tra ownCloud e Nextcloud.
2. Eseguire un backup prima di modificare la struttura del database.
Prima di creare un indice, migrare un database o effettuare una riparazione, esegui un backup completo del database e della configurazione di ownCloud e assicurati di sapere come ripristinarlo. La guida al backup di ownCloud consiglia di abilitare la modalità di manutenzione prima di eseguire un backup del database. Il comando esatto per il dump del database dipende dal tipo di database utilizzato (MySQL, MariaDB, PostgreSQL o SQLite); utilizza gli strumenti del fornitore del database e proteggi le credenziali e i file di backup.
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
La modalità di manutenzione impedisce il normale utilizzo durante l'intervento; pianificare una finestra di manutenzione per la produzione. Non copiare un file di database attivo in sostituzione di un backup che riconosca il database. Una volta completati gli interventi e i controlli di base, riportare l'istanza alla modalità normale.
sudo -u www-data php occ maintenance:mode --off
Assicurati di avere un backup ripristinabile del database e della configurazione prima di tentare una modifica dell'indice o dello schema.
3. Utilizzare le migrazioni gestite da ownCloud per le modifiche allo schema di ownCloud.
Innanzitutto, aggiorna ownCloud e le sue app compatibili a una versione supportata seguendo le istruzioni di aggiornamento ufficiali e le note di rilascio. Gli aggiornamenti di ownCloud eseguono migrazioni del database che modificano lo schema, incluse le modifiche richieste dal core e dalle app. La guida ufficiale raccomanda di eseguire la procedura di aggiornamento del database occper i sistemi più grandi, dove una richiesta web potrebbe andare in timeout.
Se la panoramica dell'amministratore continua a segnalare un indice mancante, ispeziona sudo -u www-data php occ listla documentazione ufficiale pertinente per la tua specifica build di ownCloud. Alcune guide di terze parti mostrano db:add-missing-indicesil comando, ma non è documentato nella sezione dei comandi del database di ownCloud 10.16 esaminata per questo articolo. Se la tua build elenca tale comando, consulta la relativa guida locale e conferma la procedura con la documentazione o il fornitore dell'app per quella build prima di eseguirla. Se il comando non è presente, non installare un comando Nextcloud, non modificare manualmente le tabelle principali di ownCloud e non copiare codice SQL da un'altra versione. Condividi l'avviso, la versione di ownCloud, il tipo di database e i log pertinenti con ownCloud o con il manutentore dell'app.
I comandi del database mostrati nel manuale di ownCloud, come ad esempio db:convert-typeo , db:convert-mysql-charsetservono per attività di conversione specifiche; non sono comandi generici di ottimizzazione degli indici. Non utilizzare un comando di conversione per tentare di migliorare la velocità delle query.
4. Analizzare una query lenta con strumenti nativi del database.
Quando riesci a identificare una query SQL lenta, usa gli strumenti di analisi forniti dal tuo database. MySQL e MariaDB offrono EXPLAIN; anche PostgreSQL offre EXPLAIN, con il proprio output e le proprie opzioni. Inizia con un piano che spieghi la query senza eseguirla. Fai attenzione con l'opzione di analisi: alcune varianti di database eseguono l'istruzione, il che potrebbe essere pericoloso per le scritture o costoso su un database di produzione molto occupato.
EXPLAIN SELECT ... FROM oc_filecache WHERE ...;
Verifica se il piano di esecuzione legge molte più righe di quelle restituite dalla query, se viene considerato l'indice previsto e se l'ordinamento o il join sono le operazioni predominanti. Un indice non scelto dall'ottimizzatore non è automaticamente assente: se la query restituisce molte righe, una scansione potrebbe essere più economica. Confronta lo stesso carico di lavoro su una copia di staging rappresentativa prima di apportare modifiche specifiche al database. Il codice SQL di base di OwnCloud e la struttura delle tabelle possono cambiare tra le diverse versioni, quindi un indice che oggi sembra utile potrebbe diventare ridondante o non sicuro dopo un aggiornamento.
Prima di considerare l'utilizzo di un indice personalizzato, leggi il piano di esecuzione della query specifica del database per individuare la query effettivamente lenta.
5. Ricontrollare il sintomo originale
Al termine di una migrazione supportata o di una riparazione dell'indice approvata, controlla nuovamente la panoramica dell'amministratore di ownCloud e rivedi i log del server e del database per individuare eventuali errori. Ripeti la stessa azione utente o lo stesso processo in background che ha causato il rallentamento, utilizzando un volume di dati e condizioni simili. Confronta il tempo di risposta, l'utilizzo della CPU o dell'I/O del database e il numero di righe esaminate, laddove il database renda disponibili tali misurazioni. Non segnalare un miglioramento delle prestazioni derivante da un singolo test di piccole dimensioni o da un caricamento di pagina non correlato.
Se l'avviso scompare ma la stessa operazione risulta ancora lenta, il collo di bottiglia potrebbe risiedere altrove: latenza di archiviazione, processi PHP, round trip di rete, backlog di cron, blocco dei file o cache di memoria. ownCloud consiglia la cache di memoria e il blocco esterno dei file transazionali per ridurre il carico sul database. Queste impostazioni riguardano operazioni diverse rispetto a un indice di database, quindi è necessario configurarle in base al manuale ufficiale e alla topologia di implementazione.
Lista di controllo rapida
Annotare la versione di ownCloud, il tipo di database, l'azione interessata e qualsiasi avviso di configurazione preciso.
Controlla l'elenco dei comandi installati occ; distingui le istruzioni di ownCloud da quelle di Nextcloud.
Prima di intervenire sullo schema, eseguire e verificare un backup coerente del database e della configurazione.
Utilizzare le procedure di aggiornamento e migrazione delle app supportate da ownCloud; non modificare manualmente le tabelle principali senza istruzioni specifiche per la versione.
Utilizza gli strumenti di pianificazione delle query del fornitore del database sulla query effettivamente lenta, quindi ripeti lo stesso carico di lavoro per verificare il risultato.
Non esiste un set di indici universale in grado di velocizzare ogni installazione di ownCloud 10. L'approccio più efficace consiste nel mantenere aggiornato lo schema supportato, diagnosticare la query reale, modificare solo quanto documentato dal fornitore o dal manutentore competente e verificare successivamente lo stesso carico di lavoro.