Подтвердить что ты не робот

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

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

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

Знаете ли вы простой способ получить и занести в журнал информацию: "Кэш использовался или был вызван запрос БД"?

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

4b9b3361

Ответ 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 представляет все эти статистические данные и журналы наиболее эффективно.