Velocizza le query di ownCloud 10 gestendo gli indici in modo sicuro

Per ownCloud 10, inizia applicando le modifiche allo schema fornite dal core e dalle app installate, quindi verifica quali query del database sono effettivamente lente. Non aggiungere indici alla cieca né presumere che il comando Nextcloud db:add-missing-indicessia un comando di riparazione supportato da ownCloud 10: la documentazione di riferimento OCC di ownCloud Server 10.15 non lo menziona. Gli indici possono velocizzare le letture corrispondenti, ma ogni indice aggiunto consuma spazio di archiviazione e aumenta il carico di lavoro per inserimenti, aggiornamenti ed eliminazioni.

Questo approccio è adatto a un amministratore che riscontra rallentamenti nella pagina ownCloud, nell'elenco dei file o nel funzionamento dell'app e che può accedere al server e al database. Se l'intera istanza è lenta o se è in esecuzione su SQLite con più utenti attivi, è consigliabile verificare la configurazione generale del database e dell'implementazione prima di considerare gli indici come la causa del problema.

Scegli la modifica che corrisponde alle prove

Un indice di database è una struttura ausiliaria che aiuta il database a individuare le righe senza dover scansionare l'intera tabella. ownCloud e le sue app definiscono tabelle, colonne e indici come parte del loro schema. Gli aggiornamenti del core e delle app possono includere migrazioni dello schema che creano o modificano tali indici. Mantenere aggiornato lo schema dell'applicazione è quindi il primo passo più sicuro.

Prima di apportare qualsiasi modifica, si prega di tenere conto delle seguenti distinzioni:

  • Avviso dell'amministratore o problema noto di aggiornamento: eseguire la normale procedura di aggiornamento di ownCloud e analizzarne l'output. Le migrazioni di aggiornamento sono il percorso supportato per le modifiche dello schema fornite da ownCloud o da un'app.
  • Una query nota per essere lenta, con un piano di esecuzione inefficiente: chiedete a un amministratore di database di esaminare la query e il piano. Un indice mirato potrebbe essere d'aiuto, ma le colonne e l'ordine proposti devono corrispondere alla query e alla definizione della tabella.
  • Caricamento lento, blocco o contesa diffusa: indagare su transazioni, latenza di archiviazione, capacità del database e blocco dei file. Questi sintomi, di per sé, non dimostrano la mancanza di un indice.
  • Installazione di piccole dimensioni di SQLite che diventa multiutente: valutate la migrazione a MySQL/MariaDB o PostgreSQL. ownCloud descrive SQLite come adatto per test e piccoli carichi di lavoro a utente singolo, mentre le implementazioni multiutente in produzione dovrebbero utilizzare un database server supportato.

Un indice non è una soluzione universale per aumentare la velocità. Un numero maggiore di indici può migliorare le prestazioni di determinate ricerche, ma può anche incrementare le dimensioni del database e la latenza di scrittura. Il risultato dipende dalla struttura della query, dalle dimensioni della tabella, dalla distribuzione dei dati, dal motore del database e dallo stato della cache.

Preparare un intervallo di manutenzione sicuro

  1. Annota le versioni esatte e il database. Dalla directory di installazione di ownCloud, esegui sudo -u www-data ./occ status. Prendi nota della versione di ownCloud, delle versioni delle app installate, del tipo di database e del prefisso della tabella da config/config.php. Sostituisci www-datacon l'account del server web sulla tua distribuzione.
  2. Cattura l'operazione lenta. Annota la schermata o l'app interessata, il tempo approssimativo e se il ritardo si ripete. Esamina i log di ownCloud e la diagnostica delle query lente del tuo database. Abilita la registrazione delle query solo seguendo le indicazioni del fornitore del tuo database, poiché i log possono contenere valori SQL sensibili e crescere rapidamente.
  3. Esegui il backup del database e della configurazione. Utilizza un metodo di backup coerente con il database e verifica che il backup sia leggibile. La documentazione di ownCloud sul backup utilizza mysqldump --single-transactioncome esempio i database compatibili con MySQL; adatta i valori di host, utente e database alla tua configurazione. Non inserire la password del database direttamente nella cronologia della shell o nell'elenco dei processi.
  4. Pianifica le modifiche con responsabilità. Un aggiornamento dello schema o la creazione di un indice possono utilizzare I/O del disco, CPU e blocchi. In caso di installazioni di grandi dimensioni o con un elevato carico di lavoro, informa gli utenti sulla finestra temporale disponibile e monitora il carico del database. Utilizza la modalità di manutenzione di ownCloud solo quando la procedura di aggiornamento o manutenzione applicabile lo richiede; non abilitarla come sostituto di un backup.

Applicare prima gli aggiornamenti dello schema gestiti da ownCloud.

Se è in sospeso un aggiornamento del core o dell'app di ownCloud, utilizzare la procedura di aggiornamento documentata per il metodo di installazione in uso. In un'installazione Linux convenzionale, il comando OCC viene eseguito come utente HTTP dalla directory radice di ownCloud. Seguendo le istruzioni per l'aggiornamento manuale, il comando è:

sudo -u www-data ./occ upgrade

Non eseguirlo su un'installazione i cui file sono stati aggiornati solo parzialmente. Prima di tutto, prepara i file di rilascio corrispondenti e segui i passaggi di aggiornamento ufficiali per quella versione. Per le implementazioni Docker, utilizza l'invocazione OCC documentata del container anziché un percorso host che punta a un ambiente PHP diverso.

Leggere l'output completo del comando e i log. Un comando eseguito correttamente dovrebbe terminare senza segnalare errori di migrazione; ciò non garantisce la correzione di tutte le query lente. Se l'aggiornamento segnala un errore di migrazione, interrompere l'esecuzione e analizzare l'errore anziché rieseguire ripetutamente il comando o modificare manualmente le tabelle dello schema. Consultare la documentazione di aggiornamento di ownCloud specifica per la versione e il manutentore dell'app in caso di migrazione dell'app.

Il riferimento OCC di ownCloud 10.15 elenca comandi di database come db:convert-type, db:convert-mysql-charsete db:restore-default-row-format, ma non elenca db:add-missing-indices. Poiché la disponibilità dei comandi può variare a seconda della versione e del codice installato, è possibile ispezionare la propria istanza con sudo -u www-data ./occ list dbo sudo -u www-data ./occ help db:add-missing-indices. Se quest'ultimo segnala un comando sconosciuto, non copiare il comando da un tutorial di Nextcloud in ownCloud. Consultare la documentazione per la versione esatta di ownCloud in uso e utilizzare il percorso di aggiornamento o migrazione dell'app supportato.

Quando è opportuno utilizzare un indice manuale?

L'SQL manuale è un'opzione per gli amministratori di database da utilizzare in caso di problemi di query verificati, non un'ottimizzazione di routine di ownCloud. Innanzitutto, individua la query lenta esatta ed esegui lo strumento di analisi del piano di esecuzione del motore, ad esempio EXPLAINper MySQL/MariaDB o PostgreSQL. Verifica se il piano esegue la scansione di un numero eccessivo di righe e se un indice esistente viene ignorato. Il prefisso delle tabelle di ownCloud è configurabile, quindi non dare mai per scontato che i nomi delle tabelle inizino con oc_.

Prima di creare un indice, confronta le colonne proposte con i filtri, le join e l'ordinamento della query. L'ordine delle colonne di un indice composito è importante; duplicare un indice esistente potrebbe comportare costi aggiuntivi senza migliorare il piano. Chiedi a un DBA di valutare il comportamento della versione del database, il supporto per la creazione di indici online o simultanea, lo spazio su disco disponibile, l'impatto dei blocchi e la procedura di rollback. Questi dettagli sono specifici del motore e della versione, quindi non esiste un'unica istruzione SQL sicura per ogni installazione di ownCloud 10.

Non modificare le tabelle di ownCloud né rimuovere gli indici solo perché un nome sembra ridondante. Tali modifiche possono entrare in conflitto con una successiva migrazione del core o dell'app e possono compromettere una funzionalità che utilizza una query diversa da quella che hai ispezionato. Conserva una documentazione scritta di qualsiasi modifica manuale allo schema e assicurati che possa essere ricreata dopo un ripristino o una migrazione. Preferisci una patch o una versione dell'app di ownCloud supportata quando l'indice mancante è un difetto dello schema del prodotto.

Confronta le alternative a livello di database

Se il piano utilizza già un indice appropriato, è improbabile che l'aggiunta di un altro risolva un ritardo causato altrove. Confronta queste opzioni con il collo di bottiglia osservato:

  • MySQL o MariaDB: una scelta comune per le implementazioni i cui amministratori già utilizzano questi motori. Prima di modificare le impostazioni del server, è consigliabile esaminare la memoria del buffer pool, la latenza del disco, le connessioni e i piani di gestione delle query lente.
  • PostgreSQL: un'alternativa supportata per ownCloud 10, a condizione che il connettore PHP per il database e la distribuzione siano configurati correttamente. I suoi piani di query e gli strumenti di manutenzione degli indici differiscono da quelli di MySQL, pertanto si consiglia di seguire le indicazioni specifiche per PostgreSQL.
  • SQLite: semplice da utilizzare per test o piccoli carichi di lavoro a utente singolo, ma non la scelta predefinita per carichi di lavoro di produzione multiutente e simultanei. L'ottimizzazione degli indici non può eliminare i limiti di concorrenza dell'implementazione.

Il cambio di motore di database è un progetto di migrazione, non una semplice modifica all'indice. ownCloud offre occ db:convert-typeconversioni supportate; verifica i prerequisiti, esegui prima un backup e testa l'istanza convertita prima di indirizzare gli utenti ad essa.

Verifica il risultato e interrompi se le prove lo contraddicono.

Ripeti la stessa azione dell'utente in condizioni comparabili e confronta la durata della query, il piano di esecuzione, le righe esaminate, l'I/O del database e il carico del server. Verifica che la pagina o l'app ownCloud pertinente venga completata correttamente e che i log non mostrino errori del database o di migrazione. Un risultato più veloce su una singola richiesta non dimostra un miglioramento complessivo; confronta diverse richieste rappresentative e tieni conto delle cache calde.

Se la stessa query continua a essere lenta anche utilizzando un indice appropriato, è necessario esaminare blocchi, spazio di archiviazione, latenza di rete, processi PHP e limiti delle risorse del database. Se il piano di esecuzione della query o la struttura della tabella non sono chiari, è meglio interrompere l'esecuzione prima di eseguire manualmente il DDL e chiedere a un DBA o al supporto di ownCloud di esaminarlo. Il risultato ottimale è uno schema allineato alla versione di ownCloud installata e alle query misurate, senza modifiche agli indici non tracciate.

Riferimenti ufficiali

Lascia un commento

Elimina in modo sicuro l'avviso relativo al file .htaccess di ownCloud Apache

Elimina in modo sicuro l'avviso relativo al file .htaccess di ownCloud Apache

Imposta AllowOverride All solo per la directory principale del sito web di ownCloud, verifica il vhost Apache attivo e riavvia il sito in modo sicuro per ripristinare le regole .htaccess.

Configura il controllo degli accessi di ownCloud Enterprise e verifica i registri.

Abilita l'app Enterprise Auditing di ownCloud, instrada gli eventi admin_audit a un file di registro protetto e verifica che vengano registrate le azioni reali degli utenti.

Collega ownCloud Infinite Scale a Keycloak tramite OIDC.

Collega ownCloud Infinite Scale a Keycloak tramite OIDC.

Allineare l'emittente del realm, il client web e le attestazioni utente di Keycloak consente a ownCloud Infinite Scale di autenticare gli utenti in modo affidabile su client web e mobile.

Spostare i file di ownCloud a un nuovo proprietario senza perdere le condivisioni

Trasferisci i file di tua proprietà e le cartelle condivise in uscita con il comando occ di ownCloud, scopri cosa rimane e verifica l'accesso prima di eliminare il vecchio account.

Velocizza le query di ownCloud 10 gestendo gli indici in modo sicuro

Scopri quando gli indici del database di ownCloud 10 necessitano di attenzione, come applicare in modo sicuro gli aggiornamenti dello schema supportati e quando l'ottimizzazione delle query o una modifica del database rappresentano la soluzione migliore.

Montare una condivisione SMB/CIFS in ownCloud senza utilizzare un mount Linux

Collega una condivisione di rete Windows o Samba a ownCloud tramite l'archiviazione esterna, verifica le credenziali e risolvi in ​​modo sicuro i problemi relativi alle cartelle inaccessibili.

Elimina in modo sicuro le versioni dei file di ownCloud con il comando occ

Elimina in modo sicuro le versioni dei file di ownCloud con il comando occ

Rimuovere tutte le versioni dei file di ownCloud Server Classic memorizzate per un singolo account o per tutti gli utenti, e distinguere tra eliminazione completa e scadenza basata sulla conservazione.

Connessione mobile ownCloud rifiutata? Verifica URL e raggiungibilità

Connessione mobile ownCloud rifiutata? Verifica URL e raggiungibilità

Per individuare la causa di un rifiuto di connessione mobile di ownCloud, verifica l'URL del server, la rete telefonica, l'endpoint HTTPS e i log del server nell'ordine corretto.

Esegui in modo affidabile i processi in background di ownCloud con un timer Systemd

Sostituisci le esecuzioni dei processi su richiesta con un timer systemd che esegue il comando occ system:cron supportato da ownCloud ogni 15 minuti.

Ripristina la sincronizzazione WebDAV di ownCloud individuando il percorso interrotto

Traccia la richiesta WebDAV attraverso Apache, Nginx o un proxy inverso, quindi verifica che la sincronizzazione di ownCloud funzioni con un test PROPFIND autenticato.