Вопрос по hibernate – время выполнения запроса в режиме гибернации

22

Я искал настройки hibernate или log4j, чтобы показать мне, как долго выполняются запросы в hibernate, которые вызываются hql.

До сих пор я не нашел ничего интересного.

Может быть, некоторые из вас могут помочь мне с этим вопросом?

Ваш Ответ

3   ответа
27

Есть простой способ (встроенный вhibernate) чтобы достичь этого. Это было исправленоHHH-3659 в3.5.4 а также3.6.0.Beta1.

Чтобы пойти на это, используйте:

  • logging on the package: org.hibernate.stat at least on INFO and
  • set hibernate property: hibernate.generate_statistics=true

После этого всеSQLs будет записано в журнал, включая количество выбранных строк и время выполнения запроса.

Более того, если интересно, он предоставляет статистику по запросам. Чтобы их выставили черезJMX и увидеть их, используяJConsole, ты можешь использоватьHibernate JConsole plugin, доступен на:http://hibernate-jcons.sourceforge.net/

Он показывает HQL, а не SQL. Есть ли способ изменить это?
Он работает для запросов JDBC, отправленных org.hibernate.loader.Loader, но не для запросов, отправляемых org.hibernate.jdbc.AbstractBatcher (отложенная загрузка). Самым простым решением было настроить регистрацию в DEBUG для & quot; org.hibernate. * & Quot; и посмотреть, какой запрос выполняется в какой момент времени.
Я попробовал это, один недостаток в том, что он сообщает статистику в конце сессии. Если вы делаете много вещей за один сеанс, вы не можете определить эффективность каждого из них. Например, «1436424992 наносекунды потрачено на выполнение 14 операторов JDBC»;
Привет, Питер, это сработало для меня, но мне пришлось изменить уровень log4j, чтобы отследить на org.hibernate.stat, чтобы это работало. Спасибо за ваше решение
Это сработало для меня! В logback.xml: & lt; имя логгера = & quot; org.hibernate.stat & quot; Уровень = & Quot; INFO & Quot; / & GT; В hibernate.properties: hibernate.generate_statistics = true
2

Если вам нужно индивидуальное решение, вы можете использовать AOP и добавить совет вокруг класса сеанса гибернации, если вы выполняете собственные запросы.

4

Чтобы зарегистрировать запросы со временем их выполнения в лог-файл, вы можете попробоватьМастер Шпион JDBC Водитель которые делают точно такие же вещи и имеет простойинтеграция с Spring.

Другой способ заключается в использованииSpring Insight который показывает вызовы JDBC / Hibernate и многое другое.

Ссылки по теме:

Похожие вопросы