Как узнать/зарегистрировать, использовался ли Hibernate 2-уровневый кэш или нет для запроса?
В настоящее время, чтобы проверить, использовался ли кэш второго уровня Hibernate для запроса базы данных, я проверяю свой SQL-журнал (через p6spy или logSql = true в Datasource.groovy), чтобы узнать, вызвал ли Grais/Hibernate SQL-запрос запрос. И я предполагаю, что если запрос не был зарегистрирован, это может означать, что используется кеш.
Это довольно сложно для простой информации, не так ли?
Знаете ли вы простой способ получить и занести в журнал информацию: "Кэш использовался или был вызван запрос БД"?
EDIT. Следуя рекомендациям Pascal, я добавил эту trace 'org.hibernate.cache'
в мою конфигурацию log4j.
Ответы
Ответ 1
Вы можете активировать org.hibernate.cache
категорию для регистрации всех операций кэширования второго уровня. Для этого (согласно Grails FAQ) отредактируйте файл Config.groovy
. Найдите строку с помощью:
hibernate = "off"
и замените его на:
hibernate.cache = "trace,stdout"
Ответ 2
Короткий ответ заключается в том, что при ведении журнала запросов каждый запрос регистрируется.
Различные статистики доступны через SessionFactory.getStatistics()
и Session.getStatistics()
. Выполнение запросов и количество запросов на кеш и кеш запросов недоступны в SessionStatistics.
В тестовой среде, где у вас нет параллельных сеансов, вы можете выполнить свой запрос на кеширование дважды и утверждать, что оба SessionStatistics.getQueryCacheHitCount()
и SessionStatistics.getQueryExecutionCount()
увеличились только на 1.
Hibernate Profiler представляет все эти статистические данные и журналы наиболее эффективно.