Skip to content

Prestazioni elenco Attività: query DataTable pesante su dataset >10k record #1892

Description

@sajotrei

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:

  1. conteggio totale dei record (quando abilitato);
  2. conteggio dei record filtrati;
  3. query dei dati visibili;
  4. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions