Как узнать / протоколировать, использовался ли кэш Гибернации 2-го уровня для запроса или нет?

StackOverflow https://stackoverflow.com/questions/2351004

Вопрос

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

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

Итак, знаете ли вы простой способ получить и зарегистрировать информацию :"Кэш был использован противБыл запущен запрос к базе данных" ?

Редактировать:Следуя рекомендациям Pascal, я добавил это trace 'org.hibernate.cache' к моей конфигурации log4j.

Это было полезно?

Решение

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

hibernate = "off"

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

hibernate.cache = "trace,stdout"

Другие советы

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

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

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

В Профилировщик гибернации представляет всю эту статистику и журналы наиболее эффективно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top