2010-02-28 3 views
12

Actuellement, afin de vérifier si le cache Hibernate 2nd niveau a été utilisé pour une requête de base de données, je vérifie mon journal SQL (via p6spy ou logSql = true dans Datasource.groovy) pour voir si le Grais/Hibernate a déclenché une requête SQL . Et je suppose que si la requête n'était pas enregistrée, cela pourrait signifier que le cache a été utilisé.Comment savoir si le cache Hibernate de 2ème niveau a été utilisé ou non pour une requête?

C'est assez compliqué pour une simple information, n'est-ce pas?

Alors, connaissez-vous un moyen simple d'obtenir et de consigner les informations: "Le cache a été utilisé par rapport à la requête DB a été déclenchée"?

EDIT: Suivant les recommandations Pascal, j'ai ajouté ce trace 'org.hibernate.cache' à ma configuration log4j.

Répondre

6

Vous pouvez activer org.hibernate.cachecategory pour enregistrer toutes les activités de cache de second niveau. Pour ce faire (selon les Grails FAQ), modifiez votre fichier Config.groovy. Trouver la ligne avec:

hibernate = "off" 

et le remplacer par:

hibernate.cache = "trace,stdout" 
5

La réponse courte est que lorsque la journalisation des requêtes est activée, chaque requête est enregistrée. Les statistiques sont disponibles via SessionFactory.getStatistics() et Session.getStatistics(). L'exécution de la requête et le nombre de succès et d'échec du cache de requêtes ne sont pas disponibles sur SessionStatistics.

Dans un environnement de test, où vous ne disposez pas de sessions simultanées, vous pouvez effectuer votre requête cacheable deux fois et affirmer que les deux SessionStatistics.getQueryCacheHitCount() et SessionStatistics.getQueryExecutionCount() seulement augmenté de 1.

Le Hibernate Profiler présente toutes ces statistiques et les journaux le plus efficacement.

Questions connexes