Possiedo un'applicazione Java open source che utilizza Hibernate e HSQLDB per la persistenza. In tutti i miei test sui giocattoli, le cose corrono veloci e tutto va bene. Ho un cliente che esegue il software da diversi mesi continuamente e il loro database è cresciuto significativamente nel tempo e le prestazioni sono diminuite gradualmente. Alla fine mi è venuto in mente che il database potrebbe essere il problema. Per quanto posso dire dalle istruzioni di registro, tutto il calcolo nel server avviene rapidamente, quindi questo è coerente con l'ipotesi che il DB potrebbe essere in errore.Come ottimizzare le prestazioni dell'app hsqldb/hibernate
So come eseguire il normale profilo di un programma per capire dove sono gli hot spot e che cosa richiede molto tempo. Ma tutti i profiler che conosco monitorano i tempi di esecuzione all'interno del programma e non ti danno alcun aiuto sulle chiamate a risorse esterne. Quali strumenti usano le persone per profilare i programmi che utilizzano chiamate db esterne per scoprire dove ottimizzare le prestazioni?
Un piccolo cieco che cerca in giro ha già trovato alcuni punti caldi: ho notato una chiamata dove stavo enumerando tutti gli oggetti di una particolare classe per scoprire se ce ne fossero. Una modifica di una riga al criterio [.setMaxResults (1)] ha cambiato quella chiamata da mezzo secondo a praticamente istantanea. Vedo anche luoghi in cui faccio la stessa domanda dal db molte volte all'interno di una singola transazione. Non ho ancora capito come memorizzare la risposta, ma quello che voglio veramente è uno strumento che mi aiuti a cercare questo tipo di cose in modo più sistematico.
Non ho eseguito alcuna ottimizzazione delle prestazioni nella configurazione del DB. Avevo pensato che il mio problema fosse più probabile che si trattasse di domande mal concepite o di porre la domanda sbagliata troppe volte. Credo che mi piacerebbe trovare un modo per ridurre il numero di query e le loro spese prima, e poi (dopo aver ridotto l'utilizzo dell'80%) accelerare il db stesso usando la cache e altri trucchi su quel carico ridotto. Ma non sono un esperto nell'ottimizzazione dell'uso del DB. Suggeriresti di sintonizzare il DB prima dell'applicazione? – PanCrit
Se si è certi che il problema sia in ibernazione, l'ottimizzazione del DB non sarebbe di aiuto. Prima della messa a punto, utilizzare uno strumento profiler o qualcosa che aiuti a tracciare esattamente la radice dei problemi di prestazioni, quindi ottimizzarlo. Sfortunatamente, non esiste un modo semplice. La buona notizia è che tutti gli IDE oggi hanno un supporto di profilazione decente. – razenha