2010-02-28 22 views
12

Attualmente, per verificare se la cache di secondo livello di Hibernate è stata utilizzata per una query di database, controllo il log di SQL (tramite p6spy o logSql = true in Datasource.groovy) per verificare se Grais/Hibernate ha attivato una query SQL . E presumo che se la query non fosse stata registrata, potrebbe significare che è stata utilizzata la cache.Come sapere/registrare se la cache di secondo livello di Hibernate è stata utilizzata o meno per una query?

È piuttosto complicato per una semplice informazione, no?

Quindi, si conosce un modo semplice per ottenere e registrare le informazioni: "Cache è stata utilizzata rispetto alla query DB è stata attivata"?

MODIFICA: in seguito ai consigli Pascal, ho aggiunto questo trace 'org.hibernate.cache' alla configurazione di log4j.

risposta

6

È possibile attivare org.hibernate.cachecategory per registrare tutte le attività di cache di secondo livello. Per fare ciò (secondo Grails FAQ), modifica il tuo file Config.groovy. Trovare la linea con:

hibernate = "off" 

e sostituirlo con:

hibernate.cache = "trace,stdout" 
5

La risposta breve è che quando la registrazione delle query è abilitata, ogni query viene registrata.

Varie statistiche sono disponibili tramite SessionFactory.getStatistics() e Session.getStatistics(). L'esecuzione di query e i conteggi di hit e miss della cache di query non sono disponibili in SessionStatistics.

In un ambiente di test, in cui non si dispone di sessioni simultanee, è possibile eseguire la query cacheable due volte e affermare che entrambi SessionStatistics.getQueryCacheHitCount() e SessionStatistics.getQueryExecutionCount() solo aumentata di 1.

Il Hibernate Profiler presenta tutte queste statistiche e registri più efficacemente.

Problemi correlati