2013-08-16 4 views
3

Мне нужно записать время выполнения SQL в моем приложении Java EE (любая дополнительная статистика будет дополнительным бонусом).JDBC - ведение журнала выполнения SQL-запросов

Вещи настройки более стандартным образом: источник данных на сервере приложений, обслуживающий объединенные соединения JDBC.

Приложение использует для DB смеси доступа:

  • Hibernate и
  • Spring JdbcTemplate

Он работает на:

  • Glassfish OSE и
  • Oracle DBS

Я знаю о: Anything better than P6Spy? Однако вопрос/ответы устарели, с моей точки зрения.

То, что я нашел до сих пор:

  • Я мог бы пойти на чистый Hibernate подход (hibernate show query execution time)
    • , но это не представляется возможным из-за смешанный доступ к БД в моем случае
  • Я мог бы использовать некоторые пользовательские драйверы JDBC
    • p6spy - ho Проект Веверу кажется несколько лет мертв (последний коммит 3 года назад: http://sourceforge.net/p/p6spy/code/23/tree/trunk/)
    • log4jdbc - однако не релиз более чем на 1 год, а активность источника вроде бы около 6 месяцев не трогали (http://code.google.com/p/log4jdbc/source/list)
    • еще 2: log4jdbc -log4j2 и log4jdbc-ремикс - которые кажутся живыми, но я не уверен, о стабильности и широкого использования

Рекомендации, основанные на опыте очень приветствуются.

Пожалуйста, обратите внимание, что я заинтересован в виде ответов, как: Мы используем XYZ и это наш опыт, а не я гугл только сейчас и чувствует, как ...

ответ

0

ОК, большое спасибо за ваши ответы. Наконец-то я решил пойти на P6Spy с исправлениями, характерными для нашего сценария.

Кроме того, поскольку я считаю, что пробел P6spy заполняется, все еще существует в наши дни, я решил участвовать в его разработке (https://github.com/p6spy/p6spy). Не стесняйтесь сообщать о своих проблемах или запросах функций: https://github.com/p6spy/p6spy/issues, чтобы они соответствовали вашим потребностям.

1

Измерения времени и его регистрацию похоже на работу для АОП. Если вы используете EJB, простой перехватчик должен решить вашу проблему (например, http://www.javacodegeeks.com/2013/07/java-ee-ejb-interceptors-tutorial-and-example.html). Если его Spring (судя по JDBCTemplate), попробуйте Aspectj.

+0

спасибо за идею, я скорее искал какой-то компонент многократного использования, который я мог просто «подключить и играть» в свою инфраструктуру. давайте посмотрим, появляются ли какие-то другие идеи –

+0

, я проверил глубже, но перехватчики EJB кажутся невозможными, я хотел бы регистрировать время выполнения SQL, EJB, если оно намного выше. С другой стороны, AspectJ может работать для меня. –

2

Если вы хотите мертвое точное время выполнения SQL, лучшим вариантом является sql trace. Но вы хотите поместить его в свое приложение Java EE, поэтому, очевидно, вам нужно несколько точное время выполнения.

Ниже перечислены вещи, которые я хотел бы предложить [Я выполнил их в своем коде]:

  1. Если вы просто хотите для Логгина цели, то есть соответствующие отладочные сообщения LOG4J, какие Виль л Время печати вместе с журналом запись.

  2. Я внедрил таблицу BatchLog для своего приложения, которое используется для записи начала и окончания операции. Таким образом, в вашем случае это будет время начала и окончания вашего запроса. Теперь, если это всего лишь один запрос, возможно, здесь могут помочь триггеры, или вы можете обновить таблицу журналов непосредственно перед запуском запроса и после него. Или даже лучше будет хранимая процедура, которая может позаботиться обо всем и дать более точные данные.

+0

спасибо за идеи! посмотрим, что думают другие –

Смежные вопросы