Как узнать / записать, использовался ли кеш Hibernate 2-го уровня для запроса? - PullRequest
12 голосов
/ 28 февраля 2010

В настоящее время, чтобы проверить, использовался ли кеш 2-го уровня Hibernate для запроса к базе данных, я проверяю свой журнал SQL (через p6spy или logSql = true в Datasource.groovy), чтобы увидеть, вызвал ли Grais / Hibernate SQL запрос. И я предполагаю, что если запрос не был зарегистрирован, это может означать, что кэш был использован.

Это довольно сложно для простой информации, не так ли?

Итак, знаете ли вы простой способ получить и записать информацию: «Кэш был использован против запроса БД»?

РЕДАКТИРОВАТЬ : Следуя рекомендациям Паскаля, я добавил это trace 'org.hibernate.cache' в мою конфигурацию log4j.

Ответы [ 2 ]

6 голосов
/ 28 февраля 2010

Вы можете активировать org.hibernate.cache категорию , чтобы регистрировать всю активность кэша второго уровня. Для этого (в соответствии с Grails FAQ ) отредактируйте файл Config.groovy. Найдите строку с:

hibernate = "off"

и замените его на:

hibernate.cache = "trace,stdout"
5 голосов
/ 28 февраля 2010

Короткий ответ: при включенном ведении журнала запросов каждый запрос регистрируется.

Различные статистические данные доступны через SessionFactory.getStatistics() и Session.getStatistics(). Выполнение запросов и число попаданий и пропусков кэша запросов недоступны в SessionStatistics.

В тестовой среде, где у вас нет одновременных сеансов, вы можете выполнить кешируемый запрос дважды и утверждать, что оба значения SessionStatistics.getQueryCacheHitCount() и SessionStatistics.getQueryExecutionCount() увеличились только на 1.

Hibernate Profiler представляет всю эту статистику и регистрирует наиболее эффективно.

...