Как узнать / протоколировать, использовался ли кэш Гибернации 2-го уровня для запроса или нет?
-
23-09-2019 - |
Вопрос
В настоящее время, чтобы проверить, использовался ли кэш 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.
В Профилировщик гибернации представляет всю эту статистику и журналы наиболее эффективно.