Nuovo arrivato da ibernare.Ibernazione: la prima query viene sempre caricata più a lungo
Da quello che ho capito è che, la cache di primo livello è disponibile solo quando una sessione è aperta. Quando la sessione viene chiusa, tutte le entità memorizzate nella cache nel primo livello vengono espulse/rimosse. È corretto?
Ho una semplice applicazione CRUD sviluppata in Java utilizzando il framework Hibernate. E ogni volta che la mia applicazione si avvia, carica ed esegue la sua prima operazione di interrogazione, il tempo di esecuzione è solitamente più lungo delle operazioni di query successive. La prima query richiede in genere 17 ms per l'esecuzione e i successivi sono 1-2 ms.
La mia domanda è questa, questo è veramente il comportamento di Hibernate all'inizio dell'applicazione? I dati caricati dalla prima operazione di query sono memorizzati in una cache da qualche parte? (Sicuramente non la cache di sessione perché dopo aver eseguito la mia prima operazione di query, la sessione viene chiusa subito dopo) Il caricamento impaziente influisce su questo comportamento?
Non ho davvero idea da dove iniziare poiché la documentazione di Hibernate non lo ha coperto. Correggimi se sbaglio
Apprezzo qualsiasi aiuto in quanto davvero non so da dove cominciare a leggere su questo.
EDIT: Per maggiori informazioni, ecco la statistica di sospensione della prima e della seconda operazione di query:
Primo:
100222 nanoseconds spent acquiring 1 JDBC connections; 0 nanoseconds spent releasing 0 JDBC connections; 23238430 nanoseconds spent preparing 3 JDBC statements; 8333256 nanoseconds spent executing 3 JDBC statements; 0 nanoseconds spent executing 0 JDBC batches; 0 nanoseconds spent performing 0 L2C puts; 0 nanoseconds spent performing 0 L2C hits; 0 nanoseconds spent performing 0 L2C misses; 40215588 nanoseconds spent executing 1 flushes (flushing a total of 3 entities and 3 collections); 135213 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
Secondo:
168597 nanoseconds spent acquiring 1 JDBC connections; 0 nanoseconds spent releasing 0 JDBC connections; 2332976 nanoseconds spent preparing 3 JDBC statements; 6427565 nanoseconds spent executing 3 JDBC statements; 0 nanoseconds spent executing 0 JDBC batches; 0 nanoseconds spent performing 0 L2C puts; 0 nanoseconds spent performing 0 L2C hits; 0 nanoseconds spent performing 0 L2C misses; 1095389 nanoseconds spent executing 1 flushes (flushing a total of 3 entities and 3 collections); 17600 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
Stessa esecuzione della query ma esecuzioni diverse in tempo.
Probabilmente la prima query attiva l'unità di persistenza da inizializzare, l'origine dati da inizializzare dal contenitore e il pool di connessioni da riempire. – Gimby
@Gimby Tutto ciò richiederebbe molto più di 17 ms. –
@DraganBozanovic Dipende, in base all'installazione di glassfish/payara locale, l'unità di persistenza viene configurata in pochissimo tempo, ma succede quando viene utilizzata per la prima volta. Probabilmente dipende da cosa il server fisicamente imposta su richiesta e cosa no. Il mio punto è che un primo hit di inizializzazione dell'utilizzo non è raro. – Gimby