Contesto
Su un'installazione OpenSTAManager 2.10.4 con MySQL 8.4.5 e dataset reale di circa:
- 10.190 attività (
in_interventi)
- 14.934 sessioni (
in_interventi_tecnici)
l'apertura dell'elenco Attività richiede circa 4 secondi.
Attivando l'impostazione nativa:
Nascondere il valore totale dei record delle tabelle = Sì
il tempo scende a circa 3 secondi.
Sono stati provati anche indici aggiuntivi sperimentali su:
in_interventi(id_segment, idtipointervento, data_richiesta)
in_interventi_tecnici(idintervento, orario_inizio, orario_fine)
senza miglioramenti misurabili, quindi non sono stati mantenuti.
Analisi
La query del modulo Attività include numerosi JOIN e sottoquery aggregate (righe/costi, fatture, tecnici assegnati, tecnici, email, impianti, contratti, preventivi, ordini, file, tag, ecc.).
Inoltre ajax_dataload.php esegue separatamente:
- conteggio totale dei record (quando abilitato);
- conteggio dei record filtrati;
- query dei dati visibili;
- eventuali somme/medie.
Su dataset grandi questo porta a ripetere più volte una query costosa.
Obiettivo proposto
Ottimizzare il caricamento delle DataTable, in particolare dell'elenco Attività, senza cambiare il risultato funzionale:
- stesse colonne;
- stessi filtri;
- stessi segmenti;
- stessi permessi;
- stesso ordinamento dei dati visibili;
- stesse somme/medie.
Possibili aree di intervento:
- evitare lavoro di ordinamento nelle query usate solo per il conteggio;
- ridurre la ripetizione delle sottoquery aggregate;
- valutare un approccio
filter-first sugli ID attività e collegare i dettagli solo al set già filtrato;
- evitare SELECT/JOIN non necessari per viste non utilizzate, se compatibile con ricerca e ordinamento.
Benchmark di riferimento
- OSM 2.10.4
- MySQL 8.4.5
- ~10.190 attività
- ~14.934 sessioni
- ~4 s con conteggio totale attivo
- ~3 s con conteggio totale nascosto
Contesto
Su un'installazione OpenSTAManager 2.10.4 con MySQL 8.4.5 e dataset reale di circa:
in_interventi)in_interventi_tecnici)l'apertura dell'elenco Attività richiede circa 4 secondi.
Attivando l'impostazione nativa:
Nascondere il valore totale dei record delle tabelle = Sìil tempo scende a circa 3 secondi.
Sono stati provati anche indici aggiuntivi sperimentali su:
in_interventi(id_segment, idtipointervento, data_richiesta)in_interventi_tecnici(idintervento, orario_inizio, orario_fine)senza miglioramenti misurabili, quindi non sono stati mantenuti.
Analisi
La query del modulo Attività include numerosi
JOINe sottoquery aggregate (righe/costi, fatture, tecnici assegnati, tecnici, email, impianti, contratti, preventivi, ordini, file, tag, ecc.).Inoltre
ajax_dataload.phpesegue separatamente:Su dataset grandi questo porta a ripetere più volte una query costosa.
Obiettivo proposto
Ottimizzare il caricamento delle DataTable, in particolare dell'elenco Attività, senza cambiare il risultato funzionale:
Possibili aree di intervento:
filter-firstsugli ID attività e collegare i dettagli solo al set già filtrato;Benchmark di riferimento